今天来看看我们训练后的模型识别数字的效果。
首先按上一篇文章导入模块、数据,然后进行训练。
接着,可以通过如下代码查看某条数据的数字是什么,长什么样。
可以看到,这是一个数字7。
record = 0
# data
values = test_list[record].split(',')
print(values[0])
image = np.asfarray(values[1:]).reshape(28, 28)
plt.imshow(image, cmap='Greys', interpolation='None')
# ready
inputs = (np.asfarray(values[1:]) / 255.0 * 0.99) + 0.01
接下来,使用预测函数得到预测结果。直接返回的结果中,按顺序分别是对应数字0~9的节点的值。可以看到,第8个值最大,对应数字7,看来识别出来了。
为了方便查看,可以对结果进行排序。np.argsort()会返回数组值从小到大的索引值。我们需要的是数组值降序排序的结果,只需要再数组前加个“-”就行。然后进行归一化处理,得到每个数字的可能性。我这里处理后数字7的可能性为69.39%,甩了其他数字一大堆,对这个小模型来说,效果还是不错的。
outputs = nn.predict(inputs)
print("Prediction:")
print(outputs, end="\n\n")
# sort
indexs = np.argsort(-outputs, axis=0)
outputs_sum = sum(outputs)
for index in indexs:
print(index, end=": ")
print("%.2f" % (outputs[index]/outputs_sum*100), end="%\n")
测试集中第二条数据是数字2,而我这里并不能很好的预测出这个数字。可以看到这个模型还是有所欠缺的。之后我可能会出tensorflow的文章,使用卷积神经网络,能得到99%以上的正确率。但也不要小看这个小模型,我刚开始是在一台比较旧的电脑上完成的,大概就是十年前的电脑吧。但是也能在一两秒内完成训练,得出结果,这么小巧的模型,大家就知足吧。
下一篇文章我们会来一次真·反向传播,看看电脑(应该说是这个模型)眼中的数字0~9长什么样。
网友评论