Keras - 使用卷积网形状不匹配

时间:2018-02-08 19:07:07

标签: machine-learning neural-network computer-vision keras conv-neural-network

我按照以下方式构建了我的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)

非常感谢任何帮助。

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)