如何在Keras中使用灰度图像的神经网络

3

我试图对灰色图像进行训练。 批量大小=32,图像大小=(48*48)。 我定义了我的网络 input_shape = (48,48,1)。 当我训练网络时,出现以下错误。

错误:

ValueError: 检查输入时出错:预期 conv2d_17_input 具有4个维度,但得到的数组形状为(32, 48, 48)

model.add(Conv2D(32, kernel_size=(5, 5),
                 activation='relu',
                 input_shape=(48,48,1)
                )
         )

有人能帮我吗?我的英语太差了,抱歉。 - kapike
2
你的输入应该具有形状为(32,48,48,1),你可以使用np.reshape进行重塑。 - Dr. Snoopy
3个回答

12

假设你有1000张训练图片,每张图片都是48x48的灰度图像。将这些图片加载到numpy数组中后,数组的形状将为:(1000, 48, 48)

这意味着你的数组中有1000个元素,每个元素都是一个48x48的矩阵。

现在,为了将这些数据馈送到训练卷积神经网络(CNN)中,你需要将此列表重新调整为(1000, 48, 48, 1)的形状,其中1代表通道维度。由于你使用的是灰度图像,所以必须使用1。如果是RGB图像,则会使用3

考虑下面给出的示例:

x_train = np.random.rand(1000, 48, 48) #images
y_train = np.array([np.random.randint(0, 2) for x in range(1000)]) # labels

# simple model

model = Sequential()

model.add(Conv2D(32, kernel_size=(5, 5),
                 activation='relu',
                 input_shape=(48,48,1)
                )
         )

model.add(Flatten())

model.add(Dense(1, activation='sigmoid'))
model.compile(loss='binary_crossentropy', optimizer='adam')

# fitting model
model.fit(x_train, y_train, epochs=10, batch_size=32)

这将会导致一个错误,

检查输入时发生错误:期望 conv2d_3_input 有4个维度,但得到了形状为 (1000, 48,48) 的数组。

为了解决这个问题,需要对 x_train 进行重新塑形,像这样:

x_train = x_train.reshape(x_train.shape[0], x_train.shape[1], x_train.shape[2], 1)

现在可以拟合模型了:

model.fit(x_train, y_train, epochs=10, batch_size=32)

Epoch 1/10
1000/1000 [==============================] - 1s 1ms/step - loss: 0.7177
Epoch 2/10
1000/1000 [==============================] - 1s 882us/step - loss: 0.6762
Epoch 3/10
1000/1000 [==============================] - 1s 870us/step - loss: 0.5882
Epoch 4/10
1000/1000 [==============================] - 1s 888us/step - loss: 0.4588
Epoch 5/10
1000/1000 [==============================] - 1s 906us/step - loss: 0.3272
Epoch 6/10
1000/1000 [==============================] - 1s 910us/step - loss: 0.2228
Epoch 7/10
1000/1000 [==============================] - 1s 895us/step - loss: 0.1607
Epoch 8/10
1000/1000 [==============================] - 1s 879us/step - loss: 0.1172
Epoch 9/10
1000/1000 [==============================] - 1s 886us/step - loss: 0.0935
Epoch 10/10
1000/1000 [==============================] - 1s 888us/step - loss: 0.0638

很高兴听到它有所帮助。 - Sreeram TP

1

0

你的图像应该被重塑为(sample_length, 48, 48, 1),而你的input_shape = (48, 48, 1)


    x_train = x_train.reshape(x_train.shape[0], 48, 48, 1)
    x_test = x_test.reshape(x_test.shape[0], 48, 48, 1)
    input_shape = (48, 48, 1)

您可以查看MNIST示例此处,该示例与您的情况类似。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接