Tensorflow 预期conv2d_7具有形状(220,220,1),但获得具有形状(224,224,1)的数组
我遵循keras blog()的教程来构建一个自动编码器 我使用了我自己的数据集,在我的224*224大小的图像上使用了以下代码Tensorflow 预期conv2d_7具有形状(220,220,1),但获得具有形状(224,224,1)的数组,tensorflow,keras,autoencoder,deconvolution,max-pooling,Tensorflow,Keras,Autoencoder,Deconvolution,Max Pooling,我遵循keras blog()的教程来构建一个自动编码器 我使用了我自己的数据集,在我的224*224大小的图像上使用了以下代码 input_img = Input(shape=(224,224,1)) # size of the input image x = Conv2D(16, (3, 3), activation='relu', padding='same')(input_img) x = MaxPooling2D((2, 2), padding='same')(x) x = Conv2
input_img = Input(shape=(224,224,1)) # size of the input image
x = Conv2D(16, (3, 3), activation='relu', padding='same')(input_img)
x = MaxPooling2D((2, 2), padding='same')(x)
x = Conv2D(8, (3, 3), activation='relu', padding='same')(x)
x = MaxPooling2D((2, 2), padding='same')(x)
x = Conv2D(8, (3, 3), activation='relu', padding='same')(x)
encoded = MaxPooling2D((2, 2), padding='same')(x)
# at this point the representation is (4, 4, 8) i.e. 128-dimensional
x = Conv2D(8, (3, 3), activation='relu', padding='same')(encoded)
x = UpSampling2D((2, 2))(x)
x = Conv2D(8, (3, 3), activation='relu', padding='same')(x)
x = UpSampling2D((2, 2))(x)
x = Conv2D(16, (3, 3), activation='relu')(x)
x = UpSampling2D((2, 2))(x)
decoded = Conv2D(1, (3, 3), activation='sigmoid', padding='same')(x)
autoencoder = Model(input_img, decoded)
autoencoder.compile(optimizer='adadelta', loss='binary_crossentropy')
当我看到autoencoder的摘要时,它给出的输出使得最后一层有220乘220。我附上了该摘要的快照
我不明白的是它是如何从
112*112. 我希望conv2d_6(conv2d)能给我112*112和16个内核
如果我删除Conv2D_6层,那么它将工作。但我想要它,否则我会做两次上采样。我不明白怎么了
有人能给我介绍一下吗?您需要在该层中添加
padding='same'
,这样它看起来应该像:
x = Conv2D(16, (3, 3), activation='relu', padding='same')(x)
然后它将保持相同的尺寸。
如果没有它,您就不会使用任何填充,并且因为您的内核是3乘3的,所以在该层之后,您的112*112转换为110*110