Да, ваше тестовое изображение также необходимо предварительно обработать так же, как вы предварительно обрабатывали данные тренировочного изображения.Вы получаете неверный прогноз, потому что ваша модель очень проста.
Попробуйте этот код для прогнозирования:
import numpy as np
from keras.preprocessing import image
import PIL
test_image = image.load_img('Number 8_resized.jpg', target_size=(28, 28))
test_image = image.img_to_array(test_image)
test_image /= 255.
result = model.predict(test_image.reshape(-1, 28, 28))
print("The predicited number is:")
print(np.argmax(result[0]))
Полностью обновленный код:
from __future__ import absolute_import, division, print_function
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(100, activation=tf.nn.relu),
tf.keras.layers.Dropout(0.10),
tf.keras.layers.Dense(10, activation=tf.nn.softmax)
])
model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
history = model.fit(x_train, y_train, epochs=1)
model.evaluate(x_test, y_test)
import numpy as np
from keras.preprocessing import image
#import PIL
test_image = image.load_img('zero.png', target_size=(28, 28))
test_image = image.img_to_array(test_image)
# test_image = np.expand_dims(test_image, axis=0)
# print(test_image.shape)
test_image /= 255.
result = model.predict(test_image.reshape(-1, 28, 28))
print("The predicited number is:")
print(np.argmax(result[0]))
Если вы хотите повысить точность данных испытаний, проверьте this учебник, а также не забудьте проверить этот пост о точности распознавания цифр mnist.