输入形状的卷积神经网络错误

数据挖掘 机器学习 神经网络 深度学习 喀拉斯 美国有线电视新闻网
2022-02-13 02:37:36

我有 1000 张 28*28 分辨率的图像。我将这 1000 张图像转换为numpy数组并形成一个大小为 (1000,28,28) 的新数组。因此,在使用 创建卷积层时Keras,输入形状(X 值)指定为 (1000,28,28),输出形状(Y 值)指定为 (1000,10)。因为我有 1000 个示例作为输入和 10 个类别的输出。

model = Sequential()
model.add(Conv2D(32, kernel_size=(3, 3),activation='relu',kernel_initializer='he_normal',input_shape=(1000,28,28)))
.
.
.
model.fit(train_x,train_y,batch_size=32,epochs=10,verbose=1)

因此,在使用fit函数时,它显示ValueError: Error when checking input: expected conv2d_1_input to have 4 dimensions, but got array with shape (1000, 28, 28)为错误。如何为CNN.

代码:

 model = Sequential()
 model.add(Conv2D(32, kernel_size=(3, 3),activation='relu',kernel_initializer='he_normal',input_shape=(4132,28,28)))
 model.add(MaxPooling2D((2, 2)))
 model.add(Dropout(0.25))

 model.add(Conv2D(64, (3, 3), activation='relu'))
 model.add(MaxPooling2D(pool_size=(2, 2)))
 model.add(Dropout(0.25))

 model.add(Conv2D(128, (3, 3), activation='relu'))
 model.add(Dropout(0.4))

 model.add(Flatten())
 model.add(Dense(128, activation='relu'))
 model.add(Dropout(0.3))
 model.add(Dense(10, activation='softmax'))

 model.compile(loss=keras.losses.categorical_crossentropy,optimizer=keras.optimizers.Adam(),metrics=['accuracy'])
 model.summary()

 train_x  = numpy.array([train_x])

 model.fit(train_x,train_y,batch_size=32,epochs=10,verbose=1)
1个回答

中使用的卷积操作CNNs是批处理操作。这些网络的习惯输入,至少对于KerasTensorflow,是通道在后和通道在前。第一个维度指定批处理中的数据数量,第二个和第三个维度可以是高度和宽度,如果您选择channels-last,最后一个维度将是您输入的通道数,例如 gray- 的通道数缩放图像是一个,而彩色图像是三个。如果您首先使用通道,则第一个维度将是批次中的数据数量,第二个维度将是通道数,最后,第三个和第四个维度将分别指定高度和宽度的数量。

对于您的情况,您似乎正在使用MNIST数据集。您需要做的只是将您的输入图像重塑为一种标准的提及方式。您可以将输入的大小调整为(1000,28,28, 1).