python - 如何解决此错误:预期 flatten_input 具有 3 个维度,但得到的数组形状为 (1, 28, 28, 3)?
问题描述
我正在尝试让我的代码使用 tensorflow 来识别我的学校项目中的数字。但我不断收到这个错误。有人可以帮我吗?非常感谢!
尝试过压平,改变大小等,但没有成功......
这是我的代码:
import tensorflow as tf
mnist = tf.keras.datasets.mnist
(x_train, y_train),(x_test, y_test) = mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0
model = tf.keras.models.Sequential([
tf.keras.layers.Flatten(input_shape=(28,28)),
tf.keras.layers.Dense(512, activation=tf.nn.relu),
tf.keras.layers.Dropout(0.2),
tf.keras.layers.Dense(10, activation=tf.nn.softmax)
])
model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
model.fit(x_train, y_train, epochs=1)
model.evaluate(x_test, y_test)
# Part 3 - Making new predictions
import numpy as np
from keras.preprocessing import image
import keras
test_image = image.load_img('Number 8.jpg', target_size=(28, 28))
test_image = image.img_to_array(test_image)
test_image = np.expand_dims(test_image, axis=0)
result = model.predict(test_image)
print(np.argmax(result[0]))
预计为 3 个数组
解决方案
我认为它来自这条线
tf.keras.layers.Flatten(input_shape=(28,28)),
您可以将其替换为
tf.keras.layers.Flatten()
即使你的图像是 (28,28),训练时也会有一个批量维度[batch_size, 28,28]
。由于您没有传递批量大小,model.fit
因此使用了默认值。
推荐阅读
- javascript - React:当子组件中发生onClick事件时如何在父组件中触发事件
- python - 使用 Pytorch Geometric 的超图卷积:RuntimeError: index 2268264 is out of bounds for dimension 0 with size 2268264
- angular - 从受 Firebase 规则保护的数据写入/读取时令牌的角度使用
- sql - 如何用 0 替换 varchar 列中的所有非数字值
- python - 如何从熊猫的列中提取文本
- c# - 控制台、Windows 窗体、WPF 之间的 SynchronizationContext 有什么区别?
- nginx - 有没有办法找出 nginx-rtmp 的确切资源使用情况?
- python - 根据布尔值交换图像的来源
- sql - 如何在 SQL Server Management Studio 2012 中创建矩阵
- ios - 当我在屏幕上移动我的 SKEmitterNode 时,如何使 SKEmitter 粒子保持相对于背景?