代码之家  ›  专栏  ›  技术社区  ›  Peter Veselinović

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

  •  1
  • Peter Veselinović  · 技术社区  · 7 年前

    我以以下方式构建了我的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 回复  |  直到 7 年前
        1
  •  1
  •   Maxim    7 年前

    不匹配之处在于 output_images . 卷积层的结果是 (None, 674, 514, 32) ,因为它有32个过滤器。损失 mean_squared_error 告诉keras需要一个兼容的标签形状(由 输出\u图像 不是)。

    模型还没有完成,通常CNN有许多卷积层和下采样层,因此输出形状会有所不同。但如果你想你可以 此型号 通过将过滤器数量更改为1。。。

    Conv2D(1, ...)
    

    ... 或通过制作 输出\u图像 形状张量 (100, 674, 514, 32) .