У меня есть сеть в Керасе, и я пытаюсь внести некоторые изменения в вывод слоя, а затем передать его в оставшуюся сеть. в 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
Traceback (последний последний вызов):
Файл "", строка 376, в
decoded_noise = JpegCompression () (act11) # 16
Файл
"D: \ Software \ Anaconda3 \ envs \ py36 \ Lib \ сайт-пакеты \ keras \ двигатель \ base_layer.py",
линия 457, вызов
output = self.call (входные данные, ** кваргс)
Файл "", строка 162, в вызове
image_dct = self.apply_conv (noised_image, 'dct')
Файл "", строка 126, в apply_conv
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 \ сайт-пакеты \ keras \ бэкэнд \ tensorflow_backend.py",
линия 1969 года, в форме
return tf.reshape (x, shape)
Файл
"D: \ Software \ Anaconda3 \ envs \ py36 \ Lib \ сайт-пакеты \ tensorflow \ питон \ OPS \ gen_array_ops.py",
строка 6482, в форме
«Изменить форму», тензор = тензор, форма = форма, имя = имя)
Файл
"D: \ Software \ Anaconda3 \ envs \ py36 \ Lib \ сайт-пакеты \ tensorflow \ питон \ рамки \ op_def_library.py",
строка 513, в _apply_op_helper
повысить ошибку
Файл
"D: \ Software \ Anaconda3 \ envs \ py36 \ Lib \ сайт-пакеты \ tensorflow \ питон \ рамки \ op_def_library.py",
строка 510 в _apply_op_helper
preferred_dtype = default_dtype)
Файл
"D: \ Software \ Anaconda3 \ envs \ py36 \ Lib \ сайт-пакеты \ tensorflow \ питон \ рамки \ ops.py",
строка 1146, в internal_convert_to_tensor
ret = translation_func (значение, dtype = dtype, имя = имя, as_ref = as_ref)
Файл
"D: \ Software \ Anaconda3 \ envs \ py36 \ Lib \ сайт-пакеты \ tensorflow \ питон \ рамки \ constant_op.py",
строка 229, в _constant_tensor_conversion_function
возвращаемая константа (v, dtype = dtype, name = name)
Файл
"D: \ Software \ Anaconda3 \ envs \ py36 \ Lib \ сайт-пакеты \ tensorflow \ питон \ рамки \ constant_op.py",
строка 208, в постоянном
значение, dtype = dtype, shape = shape, verify_shape = verify_shape))
Файл
"D: \ Software \ Anaconda3 \ envs \ py36 \ Lib \ сайт-пакеты \ tensorflow \ питон \ рамки \ tensor_util.py",
строка 531, в make_tensor_proto
"поддерживаемый тип." % (тип (значения), значения))
TypeError: Не удалось преобразовать объект типа в Tensor.
Содержание: (Размер (Нет), 8, 8, Размер (4), Размер (4)).
Рассмотрим приведение элементов к поддерживаемому типу.