【问题标题】:Wrong input shape to neural network layer神经网络层的输入形状错误
【发布时间】:2017-12-05 19:55:33
【问题描述】:

我正在尝试使用 MNIST 数据集对手写数字进行分类以训练我的模型。我的模型训练成功,准确率达到了 98.9%。但是当我尝试输入自定义图像时,它会显示以下错误:

Error when checking : expected conv2d_4_input to have shape (None, 28, 28, 1) but got array with shape (1, 1, 28, 28)

这是第一个卷积层,即输入层。 我能做些什么来解决这个问题? 这是我的卷积神经网络:

conv_model = Sequential()
conv_model.add(Conv2D(filters, kernel_size[0], input_shape=(28 , 28 , 1)))
conv_model.add(Activation(act))
conv_model.add(Conv2D(filters, kernel_size[0]))
conv_model.add(Activation(act))
conv_model.add(MaxPool2D(pool_size=(2,2)))
conv_model.add(Dropout(0.25))
conv_model.add(Flatten())
conv_model.add(Dense(128))
conv_model.add(Activation(act))
conv_model.add(Dropout(0.5))
conv_model.add(Dense(10))
conv_model.add(Activation('softmax'))
#conv_model.summary()

编译详情:

conv_model.compile(loss='categorical_crossentropy', optimizer='adadelta', metrics=['accuracy'])

完整的源代码: https://github.com/tanmay-edgelord/HandwrittenDigitRecognition

图片: 如果需要任何进一步的细节,请发表评论。

【问题讨论】:

    标签: python-3.x opencv keras conv-neural-network


    【解决方案1】:

    错误信息很直接:

    • 您的第一层需要形状为 (None, 28, 28, 1) 的数据,其中“None”可以是任何数字(它是批量大小,您有多少示例)。
    • 另一方面,您的数据具有形状 (1, 1, 28, 28)。

    在我看来,这种混淆很常见:Keras 将通道放在最后一个维度,而您的数据将通道放在第一个维度。

    解决方案:

    只需以正确的格式重塑您的数据:(1, 28, 28, 1)。


    但是你是想把整个图像给模型???如果是这样,它就不能很好地工作,它需要 28 x 28 像素的图像。

    您必须在不同的 28 x 28 图像中分隔每个数字。并且您必须考虑到您的图像在什么是黑色和什么是白色方面被反转的可能性。通常,MNIST 数据具有黑色背景(0 值)和白色数字(1 值)。

    【讨论】:

    • 我正在使用 cv2.resize 函数为函数 cv2.contour 找到的每个轮廓调整图像大小(在这种情况下,每个轮廓都是一个数字)。我还尝试将大小 1 、 28 、 28 、 1 输入到 cv2.resize 但它给了我一个错误,即只需要 2 个参数。我强烈建议您检查 performRecognition 代码
    • 我在后端使用 tensorflow
    • 正常使用cv2,稍后reshape结果。在准备好之后重塑roi,就在使用model.predict之前。如果roi 是一个numpy 数组,它就像roi = roi.reshape((1,28,28,1)) 一样简单。如果没有,请将其设为 numpy 数组:roi = np.array(roi).
    • 是的,我做到了,没有 roi = np.array(roi)
    【解决方案2】:

    问题通过将其传递给具有正确输入大小的重塑函数得到解决

    roi2 = roi.reshape(1,28,28,1)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-16
      • 2020-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-30
      • 2017-08-31
      • 2020-05-26
      相关资源
      最近更新 更多