我在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))。 考虑将元素强制转换为受支持的类型。