Pytorch框架下基于卷积神经网络实现手写数字识别
2018-02-27黄一天陈芝彤
黄一天 陈芝彤
摘要
在大数据时代,使用深度学习算法训练的卷积神经网络模型在计算机视觉领域取得了显著的成果。Pytorch作为一个最新的深度学习框架,具有GPU加速和支持动态神经网络等优点,使得训练模型更加简单。本文在Pytorch下利用卷积神经网络实现手写数字识别,在测试集上取得高于98%的准确率。
【关键词】卷积神经网络 手写数字识别Pytorch
1 引言
近年来,随着科学技术的不断发展,人们对电子材料的需求越来越大,这使得手写识别这一项技术的出现与发展。有了这项技术,人们可以将手写笔记文稿扫描入电脑并被识别成文档,人们也可以对智能设备进行手写录入信息,这项技术有非常大的研究价值。
2 卷积神经网络
卷积神经网络是一种带有卷积运算的网络,采用局部感知域和权值共享的方法。一个典型的结构一般包括以下几层:卷积层、池化层和全连接层。每个平面由多个独立的神经元组成,相邻两层的神经元之间互相连接,而处于同一层的神经元之间没有连接。最终的输出结果是由每层网络和偏置的共同影响下得出的。经过大量训练得出的权重就可以被用于神经网络之中,对图像进行识别与处理。
2.1 卷积层
一个图像可以被看做一个多维矩阵。在卷积层中,图像与卷积核进行卷积运算。设输入图片长和宽为W,Filter大小为F×F,步长为S,padding的像素数为P,输出的图片的长和宽为W2。则:
假设有一个5×5的图像,与一个3×3的卷积核进行卷积运算,如图1所示。
按照此过程计算,最终可以得到一个3×3的feature map,符合上述公式。
2.2 池化层与全连接层
图像经卷积层输出后进入池化层,池化层旨在通过降低特征面的分辨率来获得具有空间不变性的特征,池化层主要可以实现二次提取特征的功能。
而在全连接网络中,将所有二维图像的特征图拼接为一维特征作为全连接网络的输入。全连接层的输出可通过对输入加权求和并通过激活函数的响应得到。
3 Pytorch框架
Pytorch是最近流行的一个深度学习框架,不仅能实现强大的GPU加速,还能支持动态神经网络。Pytorch既可以看作加入了GPU支持的numpy,同时也可以看成一个拥有自动求导功能的强大的深度神经网络。
4 实验
4.1 MINIST数据集
本文使用的数据集是MINIST,这是一个计算机视觉数据集,它包含70000张手写数字的灰度图片,数字范围从0~9,每一张图片有28*28个像素点。
4.2 实验步骤
第一步:导入需要用的库,如torch、torch.nn等。
第二步:设置批处理尺寸batch size大小为64,分别定义训练数据集和训练批处理数据,测试数据集和测试批处理数据。
第三步:创建两个卷积层,第一个卷积层卷积参数为输入通道1,输出通道16,卷积核大小5,步长1,填充大小2,然后采用ReLU激活函数,最大池化层来处理数据,第二个卷积层卷积参数为输入通道16,输出通道32,卷积核大小5,步长1,填充大小2,然后采用ReLU激活函数,最大池化层处理数据,最后设置一个全连接层。
第四步:定义前向传播的过程。
第五步:定义损失函数和优化方法,优化采用SGD(随机梯度下降),学习速率设为0.01,动量设为0.5。
第六步:計算卷积神经网络的损失率并计算测试集上的准确率。
第七步:每一个epoch打印数据。
4.3 实验结果
实验结果如表1所示。
5 结语
本文基于Pytorch框架搭建了一个结构较为简单的神经网络。使用测试集进行测试后得到此网络的准确性达到98%,对图片的识别已经能够有较高的准确性。综上所述,此神经网络系统能够较好地实现手写数字识别。
参考文献
[1]丁小刚.BP神经网络与卷积神经网络在文字识别中的应用研究[D].武汉:华中科技大学,2014.
[2]卢宏涛,张秦[J].深度卷积神经网络在计算机视觉中的应用研究综述[J].数据采集与处理,2016.
[3]GuJiu-Xiang,WangZhen-Hua,JasonKuen,etal.Recent Advances in ConvolutionalNeural Networks.arXiv:1512.07108v5,2017.
[4]Bouvrie J.Notes On ConvolutionalNeural Networks,MIT CBCL TechReport,Cambridge,MA,2006.
[5]廖星宇.深度学习入门之Pytorch[M].第一版.电子工业出版社,2017.