python - 检查输入时出错:预期 conv2d_17_input 有 4 个维度,但得到了形状为 (28, 28, 1) 的数组
问题描述
我已经从 MNIST 训练了一个手写数字识别模型。第一个 Conv2D 的输入形状是 (28, 28, 1) 训练后,我想预测一个数字的下载图像。图像的形状是 (1024, 791, 3),在应用以下代码后,我将图像大小调整为 (28,28,1) 并调用 model.predict() :
resized_image = cv2.resize(image, (28, 28))
#resized_image = tf.image.resize(image, size = (28,28))
resized_image = resized_image / 225.0
resized_image = resized_image[:,:,:1]
prediction = model.predict(resized_image)
#prediction = model.predict(resized_image, batch_size = 1, verbose = 1, steps = 1)
print(labels[np.argmax(prediction)])
但我收到以下错误:
检查输入时出错:预期 conv2d_17_input 有 4 个维度,但得到了形状为 (28, 28, 1) 的数组
型号是:
model = tf.keras.models.Sequential([
tf.keras.layers.Conv2D(filters = 32, kernel_size = (3,3), padding = 'Same', activation = 'relu', input_shape = (28,28,1)),
tf.keras.layers.MaxPool2D(pool_size = (2,2)),
tf.keras.layers.Conv2D(filters = 64, kernel_size = (3,3), padding = 'Same', activation = 'relu'),
tf.keras.layers.MaxPool2D(pool_size = (2,2)),
tf.keras.layers.Flatten(),
tf.keras.layers.Dense(128, activation = 'relu'),
tf.keras.layers.Dense(10, activation = "softmax")
])
我也试过取消注释
resized_image = tf.image.resize(image, size = (28,28))
prediction = model.predict(resized_image, batch_size = 1, verbose = 1, steps = 1)
然而我收到了同样的错误。
解决方案
您没有展示您的模型,但通常,您需要考虑批次。因此,您的输入必须是[batch_size, width, height, channel]
. 如果您只有一张图像,则必须根据batch_size=1
您的情况设置[1, 28, 28, 1]
.
另外,请确保您的输入是tf.tensor
.
推荐阅读
- python-3.x - Python 3.7.0:如何将日期时间格式化为 mm-dd-yy hh:mm:ss?
- ios - iOS – 在特定时间在后台上传
- php - PHP表格(Date)基于有效性的动态颜色变化
- php - 从 PHP 页面中的 html 输入框获取值,无需重新加载页面
- laravel - 如何使用 antonioribeiro/tracker 返回 tracker_sessions 表中的所有行
- c# - C# Thread.Run 在 For 循环内的行为是什么
- node.js - 来自 Blob NodeJS 的视频流
- python - 烧瓶会话不持久化数据
- python - Python pandas excel输出不是确定的形式
- python - 如何查看编译后的python的结果?