我需要为我的学校项目做这个简单的机器学习代码,但是经过多次修改,我仍然收到无效数组的错误。有人可以帮忙吗?我现在很绝望,因为我的提交日期快要结束了...
这是我的代码:
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(),
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')
test_image = image.img_to_array(test_image, data_format='channels_first',
dtype='float32')
test_image = np.expand_dims(test_image, axis=0)
result = model.predict(test_image)
print(np.argmax(result[0]))
答案 0 :(得分:0)
tomkot已经指出,这是一个形状问题。
MNIST的形状为[60000,28,28],这也是您用来训练模型的形状。
我用自己的照片做了一个测试,传递给预测的形状是[1、3、1728、2304]。 大小可能与“数字8.jpg”不同,但可以看到,每张图片发送的形状都不正确。
当您将图片带入训练模型的形状时,您的预测应该很好。
一种重塑方式
# load your image
test_image = test_image.resize((28, 28), resample=Image.BICUBIC))
#resize your image
test_image = test_image.resize((28,28), resample=Image.BICUBIC)
#on the prediction call reshape
result = model.predict(test_image.reshape(-1,28,28))
“-1”是表示数组包含多少数据的另一种形式。 您也可以将其编写为“ .reshape(1,28,28)”。 -1只是将其留给python本身以找出正确的值。