繁体   English   中英

输入层的 TensorFlow Keras 维度错误

[英]TensorFlow Keras dimension error for input layer

我已经搜索了所有与此相关的解决方案,但我仍然无法弄清楚如何塑造我的训练数据以便 Tensorflow 接受它。

我的训练数据是一个形状为 (21005, 48, 48) 的 numpy 数组,其中 21005 是元素数,48,48 是 48x48 灰度图像。

model.add(tf.keras.layers.Conv2D(64, kernel_size=3,activation='relu',input_shape=(48,48,1)))
model.add(tf.keras.layers.Conv2D(32, kernel_size=3,activation='relu'))
model.add(tf.keras.layers.Flatten())
model.add(tf.keras.layers.Dense(7, activation='softmax'))

model.compile(optimizer='adam',
              loss = 'sparse_categorical_crossentropy',
              metrics=['accuracy'])

model.fit(image_train, emotion_train,batch_size=BATCH_SIZE,epochs=EPOCHS, verbose=1)

但是,当我运行 fit 函数时,它返回一个错误说明:

ValueError: Error when checking input: expected conv2d_input to have 4 dimensions, but got array with shape (21005, 48, 48)

这让我认为我错误地格式化了输入数据,或者缺少关于 Keras 和 TF 如何将输入图像实际传递到输入层的信息。 我已经尝试向输入形状添加额外的维度,以允许在 2d Conv 层中使用通道,并且对图像本身进行重塑也无济于事。 有什么建议吗?

在调用model.fit()之前将您的训练数据重塑为 4 维,例如:

image_train = np.reshape(image_train, (21005, 48, 48, 1))

这是必需的,因为第一个Conv2D层期望图像的input_shape为 (48,48,1)

进行预处理时,您可能已经使用 OpenCV/PIL 库以灰度模式读取图像。

当您阅读它们时,您的图书馆会考虑大小为 (48,48) 的灰度图像,而不是 (48,48,1),因此您遇到了问题。

尽快解决问题,而不是在喂给您的模型之前; 在您的代码中,无论您在哪里阅读这些图像,在附加到您的列表/数组之前,请确保选择正确的数组形状。 您可以在 OpenCV 示例下方看到:

image = cv2.imread(filepath, 0)
#Before this np_expand_dims, image has shape (48,48)
image = np.expand_dims(image , axis=2)
#After this step, image has shape (48,48,1)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM