基于BP神经网络的手写数字识别探讨1

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

基于BP神经网络的数字识别探讨2010-12-15基于BP神经网络的数字识别探讨[摘要]数字识别是当今模式识别领域中重要研究方向之一,而对手写数字体的识别更是具有广阔的应用前景。文章基于BP神经网络对如何进行数字识别进行了相关探讨。通过MATLAB仿真实验表明,基于BP神经网络的手写数字体识别可以取得较好效果。[abstract]NumberIdentificationisanimportantresearchfieldofpatternrecognition,andthehandwritingrecognitionhasbroadapplicationprospects.ThearticleisbasedonBPneuralnetworktoidentifyhowtocarryouttherelevantfiguresdiscussed.ByMatlabsimulationshowsthatbasedonBPneuralnetworkhandwritingrecognitioncanachieveagoodresults.[关键词]数字识别;模式识别;BP神经网络[keywords]Numberrecognition;Patternrecognition;BPneuralnetwork数字识别广泛应用于汽车牌照的数字自动识别和成绩单的识别以及表格中的数字识别等。项目涉及到交通、银行、教育和邮政等领域。实现数字的自动识别给人们提供了很大的方便。数字识别的算法较多,当前运用较好的主流算法以统计、神经网络和聚类分析的识别算法为主,如误差反向传播算法、支持向量机算法、自组织映射以及径向基函数等等。人工神经网络的基本特征为非线性映射、学习分类和实时优化,因此它为模式识别、非线性分类等研究开辟了新的途径。BP神经网络是一种典型的人工神经网络,有着广泛的应用。本文利用BP神经网络进行手写数字识别系统的研究。1BP神经网络概述BP神经网络又称误差反向传递神经网络。它是一种依靠反馈值来不断调整节点之间的连接权值而构建的一种网络模型。它的整个体系结构如图1所示,分为输入层、隐藏层和输出层,其中隐藏层根据具体情况的需要,可以是一层结构也可为多层结构。BP算法的基本思想是:学习过程由信号的正向传播与误差的反向传播两个过程组成。正向传播时,输入样本从输人层传人,经各隐藏层逐层处理后,传向输出层。若输出层的实际输出与期望的输出(教师信号)不符,则转入误差的反向传播阶段。误差反传是将输出误差以某种形式通过隐藏层向输入层反传,并将误差分摊给各层的所有单元,从而获得各层单元的误差信号,此误差信号即作为修正各单元权值的依据。这种信号正向传播与误差反向传播的各层权值调整过程,是周而复始的进行的。权值不断调整的过程,也就是网络的学习训练过程,此过程一直进行到网络输出的误差减少到可以接受的程度,或进行到预先设定的学习次数为止。基于BP神经网络的数字识别探讨2010-12-15图1BP神经网络体系结构2BP神经网络的数字识别BP神经网络数字识别过程由图像预处理和数字识别组成。图像预处理对图像进行一系列的变换后把最后提取到的样本的特征向量送到数字识别系统中,然后进行识别并给出结果。BP神经网络的数字识别过程如图2所示。图2BP神经网络识别过程2.1图像的预处理图像预处理是图像问的变换处理,是图像分析的前期准备,目的是使图像中描述客体特征的图像更加简练、独特性更强、信息少而唯一。本文对手写数字图像样本进行了灰度化处理、二值化处理、去离散噪声、归一化调整等预处理。其中二值化处理利用graythresh函数得到图像的全局阈值,然后使用im2bw将灰度图像转换为二值图像。程序代码为:Threshold=graythresh(fig_gray);Fig_bool=im2bw(fig_gray,threshold);其中fig_gray和fig_boo1分别为灰度图像的存储矩阵和二值化图像的存储矩阵。归一化处理将图片归一化为20×36像素点阵图。2.2特征提取在模式识别中,特征的选择是一个关键问题。将经过预处理后的数字图像中提取最能体现这个字符特点的特征向量,然后提取出训练样本中的特征向量代入BP网络之中就可以对网络进行训练,提取出待识别的样本中的特征向量代入训练好的BP网络中,就可以对字符进行识别。本文采用逐像素特征提取方法提取数字样本的特征向量。归一化后的图像形成一个36×20的布尔矩阵,依次取每列的元素转化为720×1的列矩阵,即数字字符的特征向量。训练样本读入预处理BP神经网络训练特征提取期望输出基于BP神经网络的数字识别探讨2010-12-15用matlab命令实现为:characteristic_vecotr=fig_bool_normalized(:);其中fig_bool_normalized为归一化后的图像的存储矩阵。2.3BP神经网络结构2.3.1输入层神经元个数的确定将数字图像的特征向量作为神经网络的输入,所以神经网络的输入层神经元个数等于特征向量的维数,即20×36=720个输入神经元。2.3.2输出层神经元个数的确定因为要识别10个数字,因此输出选择为10×1的矩阵,即输出节点数为l0。当数字图像0—9输入神经网络后在输出神经元对应的位置上为1,其他的位置为0。输人数字0,第1个输出神经元为1,其他为0;输入数字1,第2个输出神经元为1,其他为0;以此类推。2.3.2网络隐含层数的确定隐含层数越多,神经网络学习速度就越慢,根据Kosmogorov定理,在合理的结构和恰当的权值条件下,3层BP网络可以逼近任意的连续函数,因此,我们选取结构相对简单的3层BP网络。2.3.3隐含层神经元个数的确定一般情况下,隐含层神经元个数是根据网络收敛性能的好坏来确定的,在总结大量网络结构的基础上,得出经验公式:s=sqr(0.43nm+0.12m+2.54n+0.77m+0.35+0.51)其中n为输人层神经元个数,m为输出层神经元个数,根据以上公式,可以得出隐含层神经元个数为70。2.3.4BP神经网络构造建立一个前向BP神经网络函数newff:net=newff(minmax(P),[720,70,10],{‘logsig’,(‘logsig’,‘logsig’},‘traincgb’);其中minmax(P)为神经网络的对它的720个输入元素的最大值和最小值的限制。P为训练样本集合。[720,70,10]为该神经网络的层结构。{‘logsig’,‘logsig’,‘logsig’}为神经网络的各层的转移函数,均设置为对数S型激活函数。训练函数采用traincgb,即采用Powel1-Beale共轭梯度法训练。2.4BP神经网络的训练2.4.1训练样本集合和目标值集合数字字符归一化后的图像为36×20的布尔矩阵,用此36×20=720个元素组成一个数字字符的列矩阵,即数字字符的特征向量。由0~9这10个数字的特征列向量组成一个720×10的输入矢量,记为:sample_group=[0,1,2,⋯,9];式中的0,1,⋯,9代表数字的特征列向量。与输入矢量对应的目标矢量是希望每一个数字输入神经网络后在输出神经元对应的位置上为1,其他的位置为0。为此取目标矢量为对角线上为1的10×10的单位阵,用matlab命令实现为:targets=eye(10);本文中0—9共l0类数据,每类取20个做训练样本,即20组输入矢量构成训练样本集合训练神经网络,训练样本集合如下:P=[samples_groupl,samples_group2,⋯,group20];P=double(P);%转化为双精度类型因为数字字符的特征向量由布尔元素组成,所以训练样本集合为布尔类型,而神经网络不基于BP神经网络的数字识别探讨2010-12-15能够对布尔值进行训练,所以需要将训练样本集合转化为双精度类型。与训练样本集合相对应的目标值集合由20组目标矢量构成,目标值集合如下:T=[targets,targets,⋯,targets,targets]2.4.2网络训练本文神经网络训练采用的目标性能函数为SSE,误差性能目标值设置为0.01,当神经网络训练次数达到最大值1000或者神经网络的误差平方和SSE降到0.01以下,终止训练。程序代码如下:net.trainParam.epochs=1000;%最大训练次数net.trainParam.show=20;%显示的间隔次数net.trainParam.min_grad=le-10;%最小执行梯度net.peformFcn:‘sse’;%设置目标性能函数net.trainParam.goal=0.01;%性能目标值net.1ayers{1}.initFcn=‘initwb’;%网络层的初始化函数选为‘initwb’,使下面的输入层初始化语句randnr’有效net.inputWeights{1,1}.initFcn=‘randnr’;%输入层权值向量初始化net.1ayerWeights{2,1}.initFcn=‘randnr’;%第1网络层到第2网络层的权值向量初始化net=init(net);%初始化网络[net,tr]=train(net,P,T);%网络训练其中[net,tr]中的net为更新了权值的神经网络,tr为训练记录(次数和每次训练的误差)。从相关的神经网络训练中可以看出,当神经网络的误差平方和SSE为0.0088时,小于性能目标值0.01,神经网络训练结束,开始进行系统的性能测试。图3为学习误差曲线图。图3神经网络学习误差曲线基于BP神经网络的数字识别探讨2010-12-152.5BP神经网络的测试测试函数为神经网络仿真函数sire:testout=sim(net,test_sample)其中net为训练完成了的网络,test_sample为测试样本的特征向量,testout为神经网络的输出。部分程序代码如下:Test_sample:double(test_sample);%布尔类型转化为双精度类型testout=sim(net,test_sample);%神经网络的仿真max_value=max(testout);%输出神经元最大值if(max_value0.7)%输出神经元的最大值大于0.7才进行数字识别,小于0.7时拒绝识别testout=compet(testout);number=find(testout==1)-1;%数字识别结果end3手写数字的识别结果本文中0—9共10类数据中每类取20个做测试样本,共200个测试样本对系统进行性能测试。测试结果如表1所示。由表1中的数据可知,数字识别的正确率为99.48%,正确率较高,拒识率为4%,也比较高。总体数字识别有效率为95.5%。数字识别的正确率和拒识率与是否进行数字识别的判断值有关,本文的判断值设置为0.7。判断值选择的高,数字识别的正确率就高,但数字的拒识率也相应的就高。反之亦然。判断值的选择需要根据实际情况来定。表1识别结果数字样本个数辨识个数错误识别正确率拒绝辨识拒识率有效率020190100%15%95%120190100%15%95%220200100%000320170100%315%85%420190100%15%95%520190100%15%95%620200100%000720200100%00082019194.7%15%95%920200100%000总计2001921100%84%95.5%4结束语本文基于BP神经网络的方法进行手写体识别进行了理论上的探讨,并在MATLAB环境下进行了相关的仿真研究,表明了该方法的可行性,具备一定得可用价值。当然其中也存在不足之处,需要对此展开进一步的学习研究。

1 / 5
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功