我的keras神经网络无法预测手写数字

时间:2018-11-29 19:57:23

标签: python keras neural-network mnist

我在Keras模块中训练了前馈神经网络,但是存在一些问题。问题是带有自写数字的图像的预测不正确。

(X_train, y_train), (X_test, y_test) = mnist.load_data()
RESHAPED = 784
X_train = X_train.reshape(60000, RESHAPED)
X_test = X_test.reshape(10000, RESHAPED)
X_train = X_train.astype('float32')
X_test = X_test.astype('float32')
X_train /= 255
X_test /= 255
Y_train = np_utils.to_categorical(y_train, NB_CLASSES)
Y_test = np_utils.to_categorical(y_test, NB_CLASSES)
model = Sequential()
model.add(Dense(N_HIDDEN, input_shape=(RESHAPED,)))
model.add(Activation('relu'))
model.add(Dropout(DROPOUT))
model.add(Dense(N_HIDDEN))
model.add(Activation('relu'))
model.add(Dropout(DROPOUT))
model.add(Dense(NB_CLASSES))
model.add(Activation('softmax'))
model.summary()
model.compile(loss='categorical_crossentropy',
          optimizer=OPTIMIZER,
          metrics=['accuracy'])

history = model.fit(X_train, Y_train,
                batch_size=BATCH_SIZE, epochs=NB_EPOCH,
                verbose=VERBOSE, validation_split=VALIDATION_SPLIT)
score = model.evaluate(X_test, Y_test, verbose=VERBOSE) 
//output
....
Epoch 20/20
48000/48000 [==============================] - 2s 49us/step - loss: 0.0713 - 
acc: 0.9795 - val_loss: 0.1004 - val_acc: 0.9782
10000/10000 [==============================] - 1s 52us/step
Test score: 0.09572517980986121 
Test accuracy: 0.9781

接下来,我上传我自己写的尺寸为28x28的图像(例如-2),并执行了以下脚本:

img_array = imageio.imread('2.png', as_gray=True)
predictions=model.predict(img_array.reshape(1,784))
print (np.argmax(predictions))
//output for example 3, but I expect - 2

我尝试了其他数字不同的图片,这也给出了错误的预测。怎么了?模型显示-测试准确度:0.9781。请帮我)))

2 个答案:

答案 0 :(得分:0)

您正在使用MNIST数据集。此套装最初是为美国邮局设计的。您必须处理regional handwriting variation,因此请确保您已写下美国号码。

另一方面,错误是正常的。制作更多的手写数字并进行一些测试。

答案 1 :(得分:0)

这是数据不匹配的常见问题,为了使自己的图像具有完美的准确性,您需要进行一些预处理,如果您发现mnist数据集中的一件事是所有图像都是黑色背景为白色,这是您应该对自己的图像进行的修改之一,有关更多信息,请查看这篇很棒的中等文章:

https://medium.com/@o.kroeger/tensorflow-mnist-and-your-own-handwritten-digits-4d1cd32bbab4