数字识别

发布时间:2015-03-18 16:59:24

基于BP神经网络的手写

数字识别


目录

一、数字识别概述 1

二、BP神经网络概述 1

三、BP神经网络的数字识别 2

3.1图像的预处理 3

3.2特征提取 3

3.3 BP神经网络结构 3

3.4 BP神经网络的训练 4

四、源代码说明 4

4.1 paint函数 4

4.2 classfier函数 4

4.3 learn函数 5

五、程序使用说明 5

六、实验设置及过程 6

七、手写数字的识别结果 7

八、结论与心得 7

九、分工 7

十、参考文献 8


摘要

数字识别是模式识别领域中重要研究方向之一,具有广阔的应用前景。文章在对BP神经网络基本原理研究的基础上,提出了利用BP神经网络方法来实现手写数字识别的方案。通过MATLAB仿真实验表明,基于BP神经网络的数字识别系统取得了良好效果。

关键词:手写数字识别、模式识别、BP神经网络

Abstract

Digital identification is one of the important research directions in the field of pattern recognition,and has broad application prospects.Based on the basic principle of BP neural network on the study,the article put forward the method to realize the number with the BP neural network.The MATLAB simulation results show that,the digital recognition system based on BP neural network and achieved good results.

Keyword:Handwritten numeral recognition,Pattern recognition,BP neural network


一、数字识别概述

数字识别前景广阔,广泛应用于表格中数字的识别、汽车牌照的数字自动识别和成绩单的识别等项目。涉及到交通‘银行’教育和邮政等领域。实现数字的自动识别给人们提供了很大的方便。数字识别的算法较多,当前运用较好的主流算法以统计、神经网络和聚类分析的识别算法为主。人工神经网络的基本特征为非线性映射、学习分类和实时优化,因此它为模式识别、非线性分类等研究开辟了新的途径。BP神经网络是一种典型的人工神经络,有着广泛的应用。本次作业利用BP神经网络进行手写数字识别系统的研究。

二、BP神经网络概述

BP神经网络又称误差反向传递神经网络。它是一种依靠反馈值来不断调整节点之间的连接权值而构建的一种网络模型。它的整个体系结构如图1所示,分为输入层、隐含层和输出层,其中隐含层根据具体情况的需要,可以是一层结构也可为多层结构。由于要求不是很高,本次作业未隐含层结构。

BP算法的基本思想是:学习过程由信号的正向传播与误差的反向传播两个过程组成。正向传播时,输入样本从输入层传入,经各隐含层逐层处理后,传向输出层。若输出层的实际输出与期望的输出不符,则转入误差的反向传播阶段。误差反传是将输出误差以某种形式通过隐含层向输入反传,并将误差分摊给各层的所有单元,从而获得各层单元的误差信号,此误差信号即作为修正各单元权值的依据。这种信号正向传播与误差反向传播的各层权值调整过程,是周而复始地进行的。权值不断调整的过程,也就是网络的学习训练过程。此过程一直进行到网络输出的误差减少到可接受到的程度,或进行到预先设定的学习次数为此。

1 BP神经网络体系结构

图中:

表示输入层第个节点的输入,j=1,,M

表示隐含层第i个节点到输入层第j个节点之间的权值;

表示隐含层第i个节点的阈值;

表示隐含层的激励函数;

表示输出层第个节点到隐含层第i个节点之间的权值,i=1,,q

表示输出层第k个节点的阈值,k=1,,L

表示输出层的激励函数;

表示输出层第个节点的输出。

三、BP神经网络的数字识别

BP神经网络数字识别过程由图像预处理和数字识别组成。图像预处理对图像进行一系列的变换后把最后提取到的样本的特征向量送到数字识别系统中,然后进行识别并给出结果。BP神经网络的数字识别过程如图2所示。

2 BP神经网络识别系统

3.1图像的预处理

图像预处理是图像间的变换处理,是图像分析的前期准备,目的是使图像中描述客体特征的图像更加简练、独特性更强、信息少而唯一。

3.2 特征提取

在模式识别中,特征的选择是一个关键问题。将经过预处理后的数字图像中提取最能体现这个字符特点的特征向量,然后提取出训练样本中的特征向量代入BP网络之中就可以对网络进行训练,提取出待识别的样本中的特征向量代入训练好的BP网络中,就可以对字符进行识别。

3.3 BP神经网络结构

(1)输入层神经元个数的确定

将数字图像的特征向量作为神经网络的输入,所以神经网络的输入层神经元个数等于特征向量的维数,即20 ×36 = 720个输入神经元。

(2)输出层神经元个数的确定

因为要识别10个数字,因此输出选择为10 ×1的矩阵,即输出节点数为10。当数字图像0 - 9输入神经网络后在输出神经元对应的位置上为1,其他的位置为0。输入数字0,第1个输出神经元为1,其他为0;输入数字1,第2个输出神经元为1,其他为0;以此类推。

3BP神经网络构造

建立一个前向BP神经网络函数:newff(x,[720,10],{'logsig','logsig'},'traingd');

其中x为神经网络的对它的720个输入元素的最大值和最小值的限制, x=ones(36,20);

[720,10] 为该神经网络的层结构。

{'logsig','logsig'}为神经网络的各层的转移函数,均设置为对数S型激活函数。

训练函数采用梯度下降法即函数'traingd'

本来从网上找了很多资源作为参考,但实验效果均不是很好。在了解了BP神经网络的原理及newff函数的功能后,我们经过集体思考,对程序进行了部分修改。最终达到了比较好的实验效果。

原程序:

x=ones(25,2);

x(:,1)=0;

bpnet=newff(x,[50,1],{'logsig','logsig'},'traingd');

3.4 BP神经网络的训练

程序代码如下:

bpnet.trainParam.show=5;%显示训练迭代过程(每隔5次训练,显示一次训练进程)

bpnet.trainParam.lr=0.01;%学习速率

bpnet.trainParam.epochs=2000;%最大训练次数

bpnet.trainParam.goal=0.0001;%训练要求精度(0.005

(本模块为网上资源)

四、源代码说明

4.1 paint函数

利用paint函数实现手写识别系统GUI界面的建立和鼠标手写的实现。在学习了GUI界面的实现方法和准则、参考大量网络资源后,实现了此功能。

(1)figure:创建一个能够显示图形输出的一个窗口对象。

(2)hb1-hb7:在由parent所指定的对象中创建用户界面控件对象。

(3)assgnin:将函数变量导入到工作空间。

(4)dlmwrite:向INT.txt中写入数据。

4.2 classfier函数

利用classfier函数实现手写图像特征的提取。

1)程序代码如下:

function sample=classfier(exa)

[i,j]=find(exa~=204);

imin=min(i);

imax=max(i);

jmin=min(j);

jmax=max(j);

a=exa(imin:imax,jmin:jmax);

M=imax-imin+1;

N=jmax-jmin+1;

for m=1:5

for n=1:5

exa_c{m,n}=a(1+(m-1)*M/5:m*M/5,1+(n-1)*N/5:n*N/5);

sample(1,(m-1)*5+n)=size(find(exa_c{m,n}~=204),1)/(M*N/25);

%subplot(5,5,(m-1)*5+n),subimage(exa_c{m,n});

end

end

(2)代码分析:

exa为一个数值全为204的矩阵,它的数值会根据所写数字所占位置的不同而发生相应变化。通过find函数找到矩阵内改变的数值所构成矩阵的性质,并通过iminimax记下数值在exa中的行起始位置和结束位置,jminjmax为列起始位置和结束位置。M N分别为行数和列数,然后根据这些参数通过循环查找,将相应的特征提取到sample矩阵中。

4.3 learn函数

用本函数来建立BP神经网络。

MATLAB R2010a神经网络工具箱中包含了许多用于BP网络分析与设计的函数,BP网络的常用函数如表1所示。

1 BP网络的常用函数表

具体函数及功能已在上面介绍,此处不再赘述。

五、程序使用说明

神经网络要经过一定的训练才能达到较高的识别度。

使用时先运行(runpaint函数,出现下面的GUI界面。

界面介绍:

保存:可把手写图像保存为im.jpg文件。

训练:可使用鼠标写好数字,点击训练,弹出输入框,输入相应正确数字。

识别:对界面上的手写数字进行识别,结果显示在左边白色方框。

清除:可清除界面上数字,重新书写。

除此,还可以进行字号、颜色的选择,也可以控制训练精度和学习速率。

六、实验设置及过程

(1)0-9依次循环测试

首先通过对0-910个数进行整体的测试,大体掌握程序的识别率。未修改的程序在10个数中能够识别正确2-3个,识别率很低。然后我们对程序进行了修改,将神经网络的输入神经元个数改为720,输出神经元个数改为10。对修改后的函数进行同样的实验,正确识别的数字变为7-8个。

(2)针对具体的数字测试

用程序多次识别同一个数字,初始时,每个数字都测试20次,记下每个数字的识别率,然后针对识别率低的数字进行单独训练,通过多次训练提高识别率。

最初,每个数字的识别率平均为60%左右,通过对具体数字的单独训练,可以提高10%-20%。因为识别率会受到写的数字的形状、程序的学习等因素的影响,识别率不太稳定。后来经过多次训练当每个数字的识别率稳定后,说明训练已经基本达到要求,这时就可以测试识别率了。

七、手写数字的识别结果

本文中0 - 910类数据中每类取50个做测试样本,共500个测试样本对系统进行性能测试。测试结果如表1所示。由表1中的数据可知,总体数字识别有效率为73.6%

2 识别结果

八、结论与心得

经过将近两个月模式识别这门课程的学习和最近几周关于数字识别的研究,我们组顺利完成了本次作业,学到了很多以前没有接触过的知识。

作业题目是是基于BP神经网络的数字识别,首先我们要弄清什么是数字识别,实现数字识别可以采用哪些方法。其次我们要了解BP神经网络的工作原理及其常用函数。

通过多次讨论与尝试,我们组较好的完成了题目要求,实现准确率高。不过,在我们研究手写数字识别实现的过程中,遇到过很多问题,面对这些问题,我们不断的尝试、改进。在解决问题的过程中知道了自己在专业知识中的不足,更是学到了很多东西。最终,经过不懈的努力我们终于完成了此次作业。通过本次作业的学习,我们不仅增强了动手能力和团结协作能力,深深体会到对待问题要多方法处理,多角度分析,而且懂得了理论联系实际的重要性,提高了创新意识和综合素质。

九、分工

十、参考文献

1Sergios Theodoridis, Konstantinos Koutroumbas.Pattern Recognition.2nd ed.北京:China Machine Press,2003

2】周开利,康耀红.神经网络模型及其MATLAB仿真程序设计[M]. 北京: 华大学出版社,2005: 1742181.

3】薛智勇,娄雪芳.基于BP神经网络的数字识别.华北电力大学控制科学与工程学院.

数字识别

相关推荐