我是Keras的新手,我正在尝试使用卷积自动编码器进行图像压缩。
特别是我正在压缩所有尺寸的图像(365,929)。在处理图像的numpy 2D数组时,我添加了一个尺寸以使其成为张量。
使用以下代码向网络馈送图像时:
X,X_test=train_test_split(images,test_size=0.1)
# Adds 1D to each matrix, so to have a tensor.
X=np.array([np.expand_dims(i,axis=2) for i in X])
# X is (1036, 365, 929, 1) now
X_test=np.array([np.expand_dims(i,axis=2) for i in X_test])
inputs = Input(shape=(365, 929, 1))
h = Conv2D(4,(3,3),activation='relu',padding="same")(inputs)
encoded = MaxPooling2D(pool_size=2,padding="same")(h)
h = Conv2D(4,(3,3),activation='relu',padding="same")(encoded)
h = UpSampling2D((2,2))(h)
outputs = Conv2D(1,(3,3),activation='relu',padding="same")(h)
model = Model(inputs=inputs, output=outputs)
model.compile(optimizer='adam', loss='mse')
model.fit(X, X, batch_size=64, nb_epoch=5, validation_split=.33)
我收到以下错误:
ValueError: Error when checking target: expected conv2d_3 to have shape (366, 930, 1) but got array with shape (365, 929, 1)
如何解决此问题?如何修改CNN以拍摄尺寸不均匀的图像?
答案 0 :(得分:1)
您的问题在于UpSampling2D。您可以不对称地用0填充图像,然后将图像裁剪为原始大小,如here所述。
为了帮助调试,您可以使用print(model.Summary())
检查所有图层的尺寸。