您的位置:首页 > 理论基础 > 计算机网络

简单的神经网络识别手写数字

2019-04-12 22:48 525 查看

简单的神经网络识别手写数字

隔了一周没有更新博客了,先把上一次的神经网络的代码和数据集下载链接附上:
简单的三层神经网络
里面有所有的代码和一个完整测试集和训练集的数据。顺便再推广一下百度链接:
百度网盘
提取码:udny
这一次呢,我们用上一次的神经网络来测试一下对于手写数字(图片)的识别率。

前期准备:

为了测试,我就先在纸上手写了一些“工整”的数字,并用“特殊手段”将图片进行了处理,得到了几个用于测试手写数字识别率的图片(标准的图片大小为28*28,确保输入层的节点数为784,好吧,我承认是懒所以只写了五个)。

代码编写:

和上一次的神经网络一样,我这次的训练数据同样采用数据集进行训练,但是测试部分的代码要进行更改(毕竟要输入的是图片呀)。但是更改并不大,可以将上一次的代码的测试部分的代码更改一下即可使用:

# 开始测试数据
# 负责一维数组的参数
k = 0
# 制作一个一维数组负责存储二维数组扁平化以后的数据
inputs = numpy.zeros(784)
# 图片信息的真实数据
correct_answer = [2, 3, 4, 5, 6]

for l in range(5):
file_name = '\my_own_'+str(l+2)+'.png'
img = numpy.array(Image.open('data\神经网络2.0\image'+file_name).convert('L'))
rows, cols = img.shape
for i in range(rows):
for j in range(cols):
inputs[k] = 255-img[i][j]
k = k+1
pass
pass
print("correct answer is :" + str(correct_answer[l]))
outputs = n.query(inputs)
answer = numpy.argmax(outputs)
print("our answer is :" + str(answer))
k = 0
pass

简单的解释一下上面的代码(python大神略过,哈哈):
numpy.array(Image.open(‘data\image’+file_name).convert(‘L’))
功能:将读取的图片的像素点的值转化为矩阵,255和0代表不同的像素点需要的像素管的个数不同,个数越高,亮度越高,所以白色是255。为了将像素点的数值和训练集的数据匹配,所以用255减去数值,就可以得到我们需要的图片各个点的数值大小。
好了,代码改完了,测试一下:

哈哈,全对,证明了两件事情:
1、这个神经网络没有多大的问题,可以正常的识别手写数字了;
2、我的字也没有那么潦草嘛(终于可以和我妈证明我的字机器也是可以认得的)
这篇文章比较短,和以前一样,最后附上完整的代码的百度链接:
百度云盘:神经网络2.0
提取码:dcge
里面包含训练用数据集以及本人“亲笔手写”的处理过可以直接使用的图片,这一次的文章比较短,主要是为了放一个大招:验证码识别,下一次的博文我将会展示如何用神经网络来进行验证码的识别,还望大家多多指导。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐