У меня есть изображение и маска следующих размеров соответственно:
TensorShape ([Размер (Нет), Размер (2), Размер (2), Размер (8)])
TensorShape ([Размер (Нет), Размер (2), Размер (2), Размер (1)])
Я пытаюсь передать маску в слой UpSampling2D без удачи. Я получаю следующую ошибку:
~/workspace/multirespconv/UNetModel.py in __init__(self, img_rows, img_cols, weight_filepath, vgg_weights, inference_only)
40
41 # Create UNet-like model
---> 42 self.model = self.build_pconv_unet()
43
44 def build_vgg(self, weights="imagenet"):
~/workspace/multirespconv/UNetModel.py in build_pconv_unet(self, train_bn, lr)
130 return conv, mask
131
--> 132 d_conv9, d_mask9 = decoder_layer(e_conv8, e_mask8, e_conv7, e_mask7, 512, 3)
133 d_conv10, d_mask10 = decoder_layer(d_conv9, d_mask9, e_conv6, e_mask6, 512, 3)
134 d_conv11, d_mask11 = decoder_layer(d_conv10, d_mask10, e_conv5, e_mask5, 512, 3)
~/workspace/multirespconv/UNetModel.py in decoder_layer(img_in, mask_in, e_conv, e_mask, filters, kernel_size, bn)
121 print((img_in.shape, mask_in.shape))
122 up_img = UpSampling2D(size=(2,2))(img_in)
--> 123 up_mask = UpSampling2D(size=(2,2), data_format='channels_last')(mask_in)
124 concat_img = Concatenate(axis=3)([e_conv,up_img])
125 concat_mask = Concatenate(axis=3)([e_mask,up_mask])
~/anaconda3/envs/tensorflow_p36/lib/python3.6/site-packages/keras/engine/base_layer.py in __call__(self, inputs, **kwargs)
472 if all([s is not None
473 for s in to_list(input_shape)]):
--> 474 output_shape = self.compute_output_shape(input_shape)
475 else:
476 if isinstance(input_shape, list):
~/anaconda3/envs/tensorflow_p36/lib/python3.6/site-packages/keras/layers/convolutional.py in compute_output_shape(self, input_shape)
1931 for dim in range(len(output_shape)):
1932 if output_shape[dim] is not None:
-> 1933 output_shape[dim] *= size_all_dims[dim]
1934 return tuple(output_shape)
1935
IndexError: tuple index out of range
Согласно документации Keras, (ссылка здесь: https://www.tensorflow.org/api_docs/python/tf/keras/layers/UpSampling2D) слой UpSampling должен иметь возможность принимать любой 4D-тензор.
В приведенной выше ошибке фигура img_in имеет вид TensorShape ([Размер (Нет), Размер (2), Размер (2), Размер (8)]), а форма mask_in -
TensorShape ([Размер (Нет), Размер (2), Размер (2), Размер (1)]).