我已经用Anaconda notebook完成了这个基本项目。一切运行正常,但我自己的数字图片的所有预测都是错误的。我正在使用MNIST数字集,我正在尝试用黑色背景和白色绘画来绘制我自己的手指。但每一个预测都是错误的。你能看到代码中遗漏了什么吗?

enter code here
# Install TensorFlow
import tensorflow as tf
# Import matplotlib library
import matplotlib.pyplot as plt
#Import numpy
import numpy as np
#import cv
import cv2
#Dataset
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(128, activation='relu'),
tf.keras.layers.Dropout(0.2),
tf.keras.layers.Dense(10, activation='softmax')])
model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
model.fit(x_train, y_train, epochs=5)
print("Evaluierung");
model.evaluate(x_test, y_test)
plt.imshow(x_train[1], cmap="gray") # Import the image
plt.show() # Plot the image
predictions = model.predict([x_train]) # Make prediction, works perfect
print(np.argmax(predictions[1])) # Print out the number, works perfect
# my own picture, black background, white color, 28 px * 28 px in size
img = cv2.imread("bild1.png", cv2.IMREAD_GRAYSCALE)
plt.imshow(img) # Import the image
plt.show() # Plot the image
cv2.imshow("image",img)
cv2.waitKey(2000)
img = img/255.0
img = img.reshape(1,28,28)
pred = model.predict_classes(img)
print("Prediction: ", pred)来自训练和测试数据的每个预测都是正确的,我自己的图片都是错误的,没有错误代码!如果你能帮我那就太好了
发布于 2019-12-26 05:39:18
你这样做并没有什么特别的问题。然而,对于为什么你会得到这些结果,我可以给出几点意见。
从JPEG/PNG加载图像
有时,当您使用图像加载库加载图像时,它们的值将被裁剪,而不是恰好在0-255之间。因此,在进行规范化时,请使用以下内容,
img = img - np.min(img)
img = img/np.max(img)更多的概括
在原始的60000个样本上训练模型,并期望它在真实世界的数据上工作...好吧,那是行不通的。例如,与训练模型的数据相比,您将有以下不同之处。
因此,如果希望模型执行得更好,请使用数据增强
发布于 2019-12-26 18:38:08
非常感谢你的回答
我按照你说的修改了规范化的代码,但这并没有改变任何东西。
然后我在谷歌中寻找一些手写的数字(在mnist数据库之外)的黑色背景,我调整了它的大小,并将它们用于预测->,令我惊讶的是,每一张照片都被正确识别!!所以我认为问题不在于我的代码,而在于我绘制手写数字的方式。我用photoshop制作,新的灰度模板,黑色背景,白色绘画,并将其大小调整为28 * 28像素。但我自己的画没有被识别正确-没有错误代码,只是一个错误的预测。你知道我的画出了什么问题吗??再次感谢!
https://stackoverflow.com/questions/59480642
复制相似问题