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

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

隔了一周没有更新博客了,先把上一次的神经网络的代码和数据集下载链接附上:
简单的三层神经网络
里面有所有的代码和一个完整测试集和训练集的数据。顺便再推广一下百度链接:
百度网盘
提取码: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
里面包含训练用数据集以及本人“亲笔手写”的处理过可以直接使用的图片,这一次的文章比较短,主要是为了放一个大招:验证码识别,下一次的博文我将会展示如何用神经网络来进行验证码的识别,还望大家多多指导。

猜你喜欢

转载自blog.csdn.net/weixin_43666945/article/details/89262177
今日推荐