Keras CNN与Convolution2D不兼容

时间:2019-07-01 22:05:23

标签: python tensorflow keras conv-neural-network mnist

我正在进入卷积神经网络,并想为MNIST数据创建一个。每当我在CNN中添加卷积层时,都会出现错误:

输入0与conv2d_4层不兼容:预期ndim = 4,找到ndim = 5

我试图重塑X_Train数据集,但未成功 我尝试先添加一个展平层,但返回此错误:

输入0与conv2d_5层不兼容:预期ndim = 4,找到ndim = 2

mydf.dataframe = mydf.dataframe[['field1', 'field2']]

如果我注释掉卷积层,它会很好地工作(准确度> 95%),但是我正计划制作一个更复杂的神经网络,将来需要卷积,这就是我的出发点

2 个答案:

答案 0 :(得分:0)

您的代码中有两个问题。

  1. 您要两次编码标签,一次使用to_categorical,另一次使用LabelBinarizer。此处不需要后者,因此只需使用to_categorical将标签编码一次即可。

2.-您输入的形状不正确,应为(28, 28, 1)

另外,您应该在卷积层之后添加一个Flatten层,以便Dense层正常工作。

答案 1 :(得分:0)

Keras正在寻找尺寸为4的张量,但它的ndim作为尺寸为2的张量。 首先请确保您在Conv2D层中的内核大小在括号内 model.add(Convolution2D(32, (3, 3), activation='relu', input_shape=(img_height, img_height, 1)))

第二,由于Conv2D层需要张量输入,因此需要重塑X_train和X_test变量。

X_train = X_train.reshape(-1,28, 28, 1) #Reshape for CNN - should work!! X_test = X_test.reshape(-1,28, 28, 1) model.fit(X_train, Y_train, epochs=3, verbose=2)

有关Conv2D的更多信息,请查看Keras文档here

希望这会有所帮助。