我按照以下方式构建了我的keras模型(这当然不是最终的生产准备模型):
self.model = Sequential()
self.model.add(Conv2D(32, (3, 3), input_shape=(674, 514, 1), padding='same',
activation='relu'))
self.model.compile(loss='mean_squared_error', optimizer='adam', metrics=
['accuracy'])
模型摘要是:
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
conv2d_1 (Conv2D) (None, 674, 514, 32) 320
=================================================================
Total params: 320
Trainable params: 320
Non-trainable params: 0
_________________________________________________________________
我尝试按以下方式拟合它:
self.model.fit(self.input_images, self.output_images, batch_size=32,
epochs=10, verbose=1, shuffle=True)
训练输入和输出(self.input_images, self.output_images
)的形状均为(100, 674, 514, 1)
。
当我尝试训练我的模型时,我得到以下异常:
ValueError: Error when checking target: expected conv2d_1 to have shape
(674, 514, 32) but got array with shape (674, 514, 1)
非常感谢任何帮助。
答案 0 :(得分:1)
与output_images
不匹配。卷积层的结果是(None, 674, 514, 32)
,因为它有32个过滤器。损失mean_squared_error
告诉keras期望兼容的标签形状(提供的output_images
不是)。
模型没有完成,通常CNN有很多卷积和下采样层,因此输出形状会有所不同。但是如果你想要你可以通过将过滤器的数量改为1来使这个模型工作......
Conv2D(1, ...)
...或使output_images
形成张量(100, 674, 514, 32)
。