一、手写字符识别原理
以下来源网上。
手写数字识别,可以采用图像识别的方法,左边的x是手写之后的图像,右边的y是对应的数字。
对于图像信息,计算机是用数值来进行表示的,机器学习让计算机具备智能,实际上是训练出数值模型w对于新的输入x,可以通过与w进行数值运算得到y从而进行预测判断的。
上面的一张图片在计算机中的存储方式是数值矩阵。
我们用8×8的像素矩阵来表示这张图片,每个像素点用0~16表示灰度,0对应白色,16对应黑色,11, 12 ,13的数值对应的是深灰色,5,6,7等数字,对应的这是浅灰色,
这样上面的模糊图片就对应到下面的数字矩阵。由此手写数字识别问题就转化为计算机可以处理的数值问题。
机器学习是以矩阵运算为基础的。
来看一下我们的训练数据集,不同人的手写方式不同,写数字有非常多的写法,但不同的写法之间仍然有一些相似性,人可以识别出来并且打上标签,比如第1排的这些手写体,对应的标签都是数字0,而对于机器学习,每个手写数字都对应一个数值矩阵,他们在数值分布上呈现一定的特征。
比如数字1在数字矩阵中呈现的特征是黑色的像素点在数字矩阵当中是相邻的构成了一个线段。利用这些特征,我们可以在n维向量空间中把这些数值矩阵分为10类,分别对应右边0~9这10个数字,这样手写数字识别问题就转化成为了监督式学习的分类问题classification。
但是有时无法正确识别数字,例如识别3
通过编写程序, 机器学习都无法解决这一问题, 这就需要提到神经网络, 根据大脑对图像的识别原理,解决:
通过对每一个神经元赋值, 再乘以权重w, 再加上bias值, 再把计算结果传到激活函数中sigmoid, 用于激活下一层的神经元:
二、手写字符识别例子
下载手写字符识别代码
地址:https://github.com/mivlab/AI_course
下载MNIST_Dataset数据集
地址: https://pan.baidu.com/s/18Fz9Cpj0Lf9BC7As8frZrw 提取码:xhgk。
PyCharm新建工程,打开代码目录classify-pytorch
1、训练数据
运行train_minist.py
一开始会出现错误:
这就需要在菜单栏Run中的Edit Configurations 输入命令行参数
也就是在--datapath=后面输入训练数据的目录
然后就可以正确运行了
2、测试数据
运行tes_minist.py
三、结果
手写字符识别