神经网络及其在手写数字识别中的应用研究
最近分享几个课程设计内容,这是第二个。
摘要:为将计算为将计算机相关技术尤其是近几年的热门技术人工智能和机器学习技术落地更多应用场景,提出本文的研究内容。本文首先通过阅读国内外关于神经网络发展的相关技术文献,介绍和界定了相关概念,然后搭建机器学习环境并基于神经网络对MNIST的数据集进行手写数字识别的模型训练,模型训练结果在测试集上的表现优越,最后,总结了手写数字识别技术的应用场景。
#关键词:计算机视觉;深度学习网络;手写数字识别
课程设计下载
一、前言
在现代经济社会中,数字的应用随处可见,尤其在邮政业、通信业、交通、财务、金融、统计、地理信息、教育、科技和大数据等行业使用更为广泛,比如,我国的邮政编码都是采用7位数字编码,我国的通信体系中的手机号码(移动号码、固话号码甚至宽带、IPTV等号码都是基于数字或者数字和字母混合),我国的车辆号牌都是基于数字编码或者数字和字母混合,地理信息中的经纬度都是基于数字编码,教育尤其是数学教育中使用的数字则非常多,学生作业的识别,对作业尤其是数学作业的 自动评判等都需要数字识别应用,统计中的经济普查、人口普查、污染源普查、贫困信息调查等等都是要基于数字进行普查,而在财务和金融中,数字的应用则更为广泛,报销款填报,老旧存折识别等等都需要使用到数字识别。
如何在各行各业使用到手写数字的应用中提取并准确识别数字,可以很大程度提高生产效率,减少人工,这使得手写数字的识别研究非常有紧迫性和必要性。
随着计算机硬件的快速发展,使得神经网络在手写数字识别中有很大的应用可能,因为神经网络需要很大的计算能力和运算速度,而CPU的高速发展,GPU的快速发展和TPU的提出都使得算力的问题得以解决,因此本文拟采用神经网络和深度神经网络对手写数字进行识别。
目前很多数字识别工作仍旧依赖人的经验,这就是很容易出错,而统计数据、财务数据等敏感数据的错误将会带来严重的后果。因此,如果可以开发一些快速、准确的识别手写数字识别的系统,将可以提高手写数字识别的准确率和效率,从而提升行业效率,实现机器学习和人工智能在产业方面的落地和深度融合。
二、文献综述
在图像识别方面,Cho[9]利用 Prewitt、 Sobel、Laplace 算子对图片等进行边缘检测,通过不用的算子提取纹理特征后进行比较结果,发现Sobel算子效果较优。
在图像识别方面,Murakami 等[10]将灰度共生矩阵(GLCM)和线性判别方法(LDA)相结合识别图片,首先利用 GLCM 确定阈值来获取连通区域,然后利用 LDA 方法进行图像检测,同时以准确识别率 CCR、错误识别率 MCR、正确计数率 NCR 作为性能评价指标,发现当每个窗的 GLCM 熵值有一半小于阈值,且 G、B 分量 值小于颜色平均值时,准确识别率最高。
在利用深度学习识别图像方面,加拿大学者Geoffrey Hinton等提出使用最大池化等技术使用深度学习对图像进行有效识别,在很大程序上提高了图像识别率,还提出循环神经网络(又译递归神经网络)识别图像技术,将深度学习技术应用到图像识别中去。
三、手写数字识别基本流程
可以将手写数字识别的步骤分为单个手写数字识别和手写数字分割,这样就可以对包含多个手写数字的图像进行识别,等识别完成之后,再将这些分割的手写数字的识别结果连起来,就是最终的识别结果。
手写数字的识别流程如图1所示,先对图像进行分割,在对分割后的图像进行识别,对所有分割图像识别完成后,对所有分割图像的结果进行汇总就得到了识别结果。
图1 数字图像切割识别流程
四、数据集获取以及预处理过程
在本文中,将使用MNIST数据集作为训练的原始图像,这个训练集包含有70000个大小适中的图像,每一个图像都包含有一个手写数字,这些数字是由美国的高中省和美国的雇员们提供的,这是一个非常丰富的适合于做手写数字训练的图像集。
MNIST数据集在机器学习和人工智能中的作用非常重要,很多人工智能和机器学习的初学者都会使用MNIST数据集进行入门学习,因此MNIST也被称为机器学习和人工智能界的“Hello World”数据集。此外,如果一个新的算法或者模式较之前人的研究有所突破,也会使用MNIST作为训练集以此来进行验证,因此MNIST还是一个专家和学者进行科学研究和验证成果的重要数据集。综上,MNIST不仅是学习人工智能的利器,也是科研的法宝,因此,本文采用MNIST作为训练集。
MNIST数据集的方法有很多,很多流行的人工智能和机器学习网站都提供了这个数据集的下载。本文拟采用sklearn包对MNIST数据集进行下载。
下载后的图像展示如图2所示,第一行从左向右是手写数字“0”和“8”,第二行从左向右是手写数字“4”和“3”。
图2 手写数字图像展示
数据预处理首先需要将数据进行结构化处理,然后对数据集进行切割,分为训练集和测试集两部分。
原始数据的结构化很好,都是28*28像素大小的图像,每一个图像都有对应的标签,比如图3.3所示的第一行从左向右的标签分别是“0”和“8”,代表这两个图像代表的数字就是“0”和“8”。
为了随机将这些包含手写数字的图像按照一定比例分成训练集和测试集,本文采用一个中间列表随机生成一定比例的数字,然后基于中间列表再随机获取原始图像,从而生成训练集和测试集。具体分法如代码附录3所示。
为了模型训练方便和加快训练速度,需要将每一个像素的值从1-255映射到0-1之间,这个可以通过对图像矩阵简单除以255获得。至此,就完成了对图像的预处理,为下一步模型训练奠基了数据基础。
五、实验过程以及结果
最终的训练结果是一个包含28×28个输入、第一个隐藏层包含196个神经、第二个隐藏层包含49个神经、第三个隐藏层包含24个神经、最后有是十个输出的一个深度神经网络,在训练集上面的精准度可以达到99.67%,训练的过程和结果如图3所示。
图3 训练过程和结果
训练完成之后,就可以对新的图像进行识别,对新的图像的识别采用概率表示,即多大概率是数字“0”、“1”、“2”等,取概率最大的那个预测就是预测的结果,比如预测到是“0”的概率比预测为其他数字的概率都打,那么就说明预测结果是“0”。预测的代码如附录5所示,图4.5为对某一个图像的预测结果,其中是“8”的概率最大,那么说明对这个图像的手写数字预测结果就是“8”,图4为这个图像的显示结果。
图4 对某一个图像的预测结果
图5 预测图像的显示效果
六、训练以及预测代码
模型的训练代码采用基于tensorflow中的keras,如下所示。
from tensorflow import keras
model = keras.Sequential([
keras.layers.Flatten(input_shape=(28, 28)),
keras.layers.Dense(196, activation='relu'),
keras.layers.Dense(49, activation='relu'),
keras.layers.Dense(24, activation='relu'),
keras.layers.Dense(10)
])
model.compile(optimizer='adam',
loss=keras.losses.SparseCategoricalCrossentropy(from_logits=True),
metrics=['accuracy'])
model.fit(train_images, train_labels, epochs=20)
预测代码如下所示。
probability_model = keras.Sequential([model, keras.layers.Softmax()])
predictions = probability_model.predict(predict_imges)
print(predictions[0:4])
七、应用展望
邮政编码是对行政区划的编码,按照省(自治区)、区县、乡镇(街道)的三级结构进行编码,一般是7位,可以精确到乡镇和街道。邮政编码在邮政和物流中的起着精确定位到具体乡镇和街道的作用,在信件和包裹中一般有寄件人邮政编码和收件人邮政编码。
对手写邮政编码的识别可以大大提高邮政编码的识别准确率和效率,从而提升邮件和包裹的分拣速度,从而加快邮递速度,提升邮递行业生产效率。此外,现代物流中很重视信息化建设在物流中的作用,物流中的邮政编码和邮寄地址等都在信息化系统中以信息数据的形式出现,但是在填单过程中不可避免地会出现手写数字的场景,比如寄件人提前将寄件信息手写到纸上然后交给物流工作人员的过程中,因此手写数字识别在录入邮件信息等方面也有应用前景。
参考文献
[1]Yann LeCun,Yoshua Bengio,Geoffrey Hinton.Deep learning[J].Nature,2015
[2]Cho J, Choi J, Qiao M, Ji C W, Kin H Y, Uhm K B, Chon T S. Automatic identification of whiteflies, aphids and thrips in greenhouse based on image analysis. International Journal of Mathematics and Computers in Simulation, 2007:46-53.
[3]Murakami S, Homma K, Koike T. Detection of small pests on vegetable leaves using GLCM. The Society for Engineering in Agricultural, Food and Biological Systems, Paper Number: 053136.
[4]穆文秀.洪蕾.王瀚.基于机器学习的智能昆虫分目识别算法应用[J].数字技术与应用,2018,(11):118-119.
[5]刘晓燕.基于Python的夜间图像增强方法研究[J].湖北民族学院学报(自然科学版),2019,(1):85-89.
[6]何春华.张雪飞.胡迎春.基于改进Sobel算子的边缘检测算法的研究[J].光学技术,2012,(3):323-327.
[7]靳鹏飞.一种改进的Sobel图像边缘检测算法[J].应用光学,2008,(4):625-628.
[8]韩晓冬.王浩森.王硕.Python在图像处理中的应用[J].北京测绘,2018,(3):312-317.
[9]张海涛.刘景鑫.赵晓晴.基于VGG16的急性淋巴细胞白血病血液细胞显微图像人工智能辅助诊断分类研究[J].中国医疗设备,2019,(7):1-4+9.
[10]邱道尹, 张成花, 张洪涛, 沈宪章, 岳永娟. 神经网络在储粮害虫 识别中的应用. 农业工程学报, 2003, 19(1):142-144.
[11]姚侃.徐鹏.张广群.基于图像的昆虫分类识别研究综述[J].智能计算机与应用,2019,(3):29-35.