首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何修正Tensorflow 1.14.0rc中的“分片分配与预期类型不兼容”的问题?

如何修正Tensorflow 1.14.0rc中的“分片分配与预期类型不兼容”的问题?
EN

Stack Overflow用户
提问于 2019-08-18 17:54:58
回答 1查看 143关注 0票数 1

我正在尝试在tensorflow 1.14.0中实现滑动DFT算法,并且使用tf.function,这样我就不用担心控制流了,但是我遇到了一个问题。当我试图用变量中的另一个元素分配变量的一个元素时,我会收到一个错误,涉及到块分配中不兼容的类型。

我尝试过使用tf.scatter更新、tf分配,并且只使用一个典型的片分配,但是这些都没有起作用。

代码语言:javascript
复制
    @tf.function
    def sdft_func(self,input_tensor):
        for i in range(self.N_t):
        #retrieving variables so that I have direct access to it
        #instead of getting access to the read tensor
        _, _, self.in_s = self.get_variables()
        last = self.in_s[self.N_t-1]
        for j in range(self.N_t,0,-1):
            _, _, self.in_s = self.get_variables()
            val = self.in_s[j-1]
            #The line below gives the error
            self.in_s = self.in_s[j].assign(val)
            print(self.in_s)

我得到的错误如下:

TypeError:在op中,输入类型(tf.complex64、tf.int32、tf.complex64)与预期类型(tf.complex64_ref、tf.int32、tf.complex64)不兼容

提前谢谢你!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-19 15:55:32

我似乎缩小了问题的范围,因为我必须尝试在tf.complex64函数中设置tf.function变量。因此,为了克服这一问题,我简单地将操作抽象出来,以便变量设置在tf.function函数之外完成。解决办法见下文:

代码语言:javascript
复制
    def sdft_func(self,input_tensor):

        @tf.function
        def func(input_tensor,N_t,in_s,coeffs,freqs):
            in_s = tf.identity(in_s)
            coeffs = tf.identity(coeffs)
            freqs = tf.identity(freqs)


            for i in range(N_t):
                last = in_s[self.N_t-1]

                in_s = in_s[:-1]
                new_val = tf.expand_dims(tf.complex(input_tensor[i],
                                tf.cast(0.0,dtype=tf.float32)),0)

                in_s = tf.concat([new_val,in_s],axis=0)
                    delta = in_s[0] - last

                freqs_2 = tf.TensorArray(tf.complex64,size=self.N)

                for j in range(self.N_t):
                    freqs_2 = freqs_2.write(j,(freqs[j]+delta)*coeffs[j])
                freqs = freqs_2.stack()
                freqs.set_shape([self.N])

            return freqs,in_s

        new_freqs, new_in_s = func(input_tensor,self.N_t,
                self.in_s,self.coeffs,self.freqs)

        self.in_s = self.in_s.assign(new_in_s)
        self.freqs = self.freqs.assign(new_freqs)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57547036

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档