此错误是什么意思“无法将类型<class'tuple'=“”>的对象转换为张量?

时间:2019-04-30 22:15:50

标签: python tensorflow keras

我在Keras中有一个网络,我尝试对图层的输出进行一些更改,然后将其提供给其余的网络。在apply function中,它接受具有形状(批大小为1,32,32)的张量,并且所有张量的格式均为channel_first。然后我将其与形状为(8,8,1,64)的张量进行卷积,输出为(?,64,4,4),但是当我想将形状更改为(8,8,4,4)时它产生以下错误。为什么会发生此错误?因为当我尝试在没有网络的情况下使用张量检查代码时,它可以工作!我也在这里添加代码。你能告诉我是什么问题吗?

    def apply_conv(self, image, filter_type: str):

        if filter_type == 'dct':
            filters = self.dct_conv_weights
        elif filter_type == 'idct':
            filters = self.idct_conv_weights
        else:
            raise('Unknown filter_type value.')
        print(image.shape)

        image_conv_channels = []
        for channel in range(image.shape[1]):
            print(image.shape)
            print(channel)
            image_yuv_ch = K.expand_dims(image[:, channel, :, :],1)
            print( image_yuv_ch.shape)
            print(filters.shape)
            image_conv = Kr.backend.conv2d(image_yuv_ch,filters,strides=(8,8),data_format='channels_first')
            print(image_conv.shape)
            print('salam')
#            image_conv = Kr.backend.permute_dimensions(image_conv,(0, 2, 3, 1))
            image_conv = Kr.backend.reshape(image_conv,(image_conv.shape[0], 8,8,image_conv.shape[2], image_conv.shape[3]))
            print(image_conv.shape)
            image_conv =  Kr.backend.permute_dimensions(image_conv,(0, 1, 3, 2, 4))
            image_conv = Kr.backend.reshape(image_conv,(image_conv.shape[0],
                                                  image_conv.shape[1]*image_conv.shape[2],
                                                  image_conv.shape[3]*image_conv.shape[4]))

#            Kr.backend.expand_dims(image_conv,1)

            # image_conv = F.conv2d()
            image_conv_channels.append(image_conv)

        image_conv_stacked = Kr.backend.concatenate(image_conv_channels, axis=1)

        return image_conv_stacked
  

回溯(最近通话最近一次):

     

文件“”,第376行,在       encoded_noise = JpegCompression()(act11)#16

     

文件   “ D:\ software \ Anaconda3 \ envs \ py36 \ lib \ site-packages \ keras \ engine \ base_layer.py”,   第457行,致电       输出= self.call(输入,** kwargs)

     

文件“”,第162行,正在调用       image_dct = self.apply_conv(noised_image,'dct')

     

apply_conv中的文件“”,第126行       image_conv = Kr.backend.reshape(image_conv,(image_conv.shape [0],8,8,image_conv.shape [2],image_conv.shape [3]))

     

文件   “ D:\ software \ Anaconda3 \ envs \ py36 \ lib \ site-packages \ keras \ backend \ tensorflow_backend.py”,   1969年重塑       返回tf.reshape(x,shape)

     

文件   “ D:\ software \ Anaconda3 \ envs \ py36 \ lib \ site-packages \ tensorflow \ python \ ops \ gen_array_ops.py”,   线6482,重塑       “重塑”,张量=张量,形状=形状,名称=名称)

     

文件   “ D:\ software \ Anaconda3 \ envs \ py36 \ lib \ site-packages \ tensorflow \ python \ framework \ op_def_library.py”,   _apply_op_helper中的第513行       提高错误

     

文件   “ D:\ software \ Anaconda3 \ envs \ py36 \ lib \ site-packages \ tensorflow \ python \ framework \ op_def_library.py”,   _apply_op_helper中的第510行       preferred_dtype = default_dtype)

     

文件   “ D:\ software \ Anaconda3 \ envs \ py36 \ lib \ site-packages \ tensorflow \ python \ framework \ ops.py”,   第1146行,位于internal_convert_to_tensor中       ret = conversion_func(value,dtype = dtype,name = name,as_ref = as_ref)

     

文件   “ D:\ software \ Anaconda3 \ envs \ py36 \ lib \ site-packages \ tensorflow \ python \ framework \ constant_op.py”,   _constant_tensor_conversion_function中的第229行       返回常量(v,dtype = dtype,name = name)

     

文件   “ D:\ software \ Anaconda3 \ envs \ py36 \ lib \ site-packages \ tensorflow \ python \ framework \ constant_op.py”,   第208行,常数       值,dtype = dtype,shape = shape,verify_shape = verify_shape))

     

文件   “ D:\ software \ Anaconda3 \ envs \ py36 \ lib \ site-packages \ tensorflow \ python \ framework \ tensor_util.py”,   make_tensor_proto中的第531行       “支持的类型”。 %(类型(值),值))

     

TypeError:无法将类型的对象转换为Tensor。   内容:(Dimension(None),8,8,Dimension(4),Dimension(4))。   考虑将元素强制转换为受支持的类型。

0 个答案:

没有答案