读书报告研究报告 1.docx

上传人:b****6 文档编号:8651051 上传时间:2023-02-01 格式:DOCX 页数:13 大小:180.13KB
下载 相关 举报
读书报告研究报告 1.docx_第1页
第1页 / 共13页
读书报告研究报告 1.docx_第2页
第2页 / 共13页
读书报告研究报告 1.docx_第3页
第3页 / 共13页
读书报告研究报告 1.docx_第4页
第4页 / 共13页
读书报告研究报告 1.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

读书报告研究报告 1.docx

《读书报告研究报告 1.docx》由会员分享,可在线阅读,更多相关《读书报告研究报告 1.docx(13页珍藏版)》请在冰豆网上搜索。

读书报告研究报告 1.docx

读书报告研究报告1

2014学年第二学期研究生课程考核

(读书报告、研究报告)

考核科目:

智能控制

学生所在院(系):

电子信息工程学院

学生所在学科:

控制理论与控制工程

姓名:

高韵

学号:

1304210221

题目:

基于BP神经网络的字母识别

 

1.背景介绍

1.1.课题研究背景

为了解决计算机字符的自动识别、高速加工处理,使计算机达到真正智能化,人们对计算机识别进行了多年的研究,并取得了很大的进步。

数字和子母识别是字符识别的一个分支,一般通过特征匹配及特征判别的方法来进行处理,目前识别率还较低。

因此,为了提高识别率,还要寻求新的方法和途径。

近年来,人工神经网络技术取得了巨大的发展,它所具有的优势:

固有的并行结构和并行处理、知识的分布存储、容错性、自适应性、模式识别能力,为手写体数字识别开辟了新的途径。

字母识别作为模式识别的一个重要分支,在邮政、税务、交通、金融等行业的实践活动中有着及其广泛的应用。

字母识别作为模式识别领域的一个重要问题,也有着重要的理论价值。

一方面,阿拉伯数字是世界各国通用的符号,因此,数字是一个重要枢纽。

在符号识别领域,数字识别为这一领域提供了一个算法研究的平台。

另一方面,数字的识别方法很容易推广到其它一些相关问题,特别是对英文字母的识别,但到目前为止机器的识别本领还无法与人的认知能力相比,这仍是一个有难度的开放问题。

1.2.发展现状以及研究意义

实际上,神经网络系统设计时,从应用者的角度出发,重点就是如何选择或确定适当的网络结构及其参数,这需要神经网络方面的专业知识,但如何很好地利用MATLAB中已有的网络函数,更好解决工程实际问题,就是本文要讨论的重点问题.而数字和子母识别作为模式识别的一个分支。

在日常生活和科研中具有十分重要的作用。

数字和子母识别的算法一般是采用以知识、神经网络、人工智能为基础的模板匹配法、轮廓多边形相关、傅立叶系数法等方法来进行识别的。

以上方法识别效率高,但是实现较为复杂。

在交通,税务,金融等领域字母识别起到了很重要的作用。

比如在交通中对于车牌的识别都大量运用了数字和字母识别的功能。

2BP网络模型介绍

2.1BP网络模型

  BP网络是一种单向传播的多层前向网络[2],每一层节点的输出只影响下一层节点的输出,其网络结构如图1所示,其中X和U分别为网络输入、输出向量,每个节点表示一个神经元。

网络是由输入层、隐层和输出层节点构成,隐层节点可为一层或多层,同层节点没有任何耦合,前层节点到后层节点通过权连接。

输入信号从输入层节点依次传过各隐层节点到达输出层节点。

采用BP算法的多层感知器是至今为止应用最广泛的神经网络,在多层感知器的应用中,一般习惯将单隐层感知器称为三层感知器,所谓三层包括了输入层、隐层和输出层。

 

图1三层BP网

三层感知器中,输入向量为

,隐层输出向量为

,输出层输出向量为

,期望输出向量为

,输入层到输出层的权值为

,隐藏层到输出层的权值矩阵为

,各层之间的信号关系如下:

对输出层有:

对隐藏层有:

上式中,变换函数f(x)均为单极性sigmoid函数

F(x)具有连续可导的特点,

以上共同构成三层感知器的数学模型

2.2BP网络算法思想

BP算法的基本思想是,学习过程由信号的正向传播与误差的反向传播两个过程组成。

正向传播时,输入样本从输入层传入。

经各层逐层处理后,传向输出层。

若输出层的实际输出与期望的输出(教师信号)不符,则转入误差的反向传播阶段。

误差反传是将输出误差以某种形式通过隐层向输入层逐层反传、并将误差分摊给各层的所有单元,从而获得各层单元的误差信号,此误差信号即作为修正各单元权值的依据。

这种信号正向传播与误差反向传播的各层权值调整过程,是周而复始的进行的。

权值不断调整的过程,也就是网络的学习训练过程。

此过程一直进行到网络输出的误差减少到可接受的程度,或进行到预先设定的学习次数为止。

3研究问题方案

  字符识别是模式识别领域的一项传统课题,这是因为字符识别不是一个孤立的问题,而是模式识别领域中大多数课题都会遇到的基本问题,并且在不同的课题中,由于具体的条件不同,解决的方法也不尽相同,因而字符识别的研究仍具有理论和实践意义。

这里讨论的是用BP神经网络对26个英文字母的识别。

  在对字母进行识别之前,首先必须将字母进行预处理,即将待识别的26个字母中的每一个字母都通过的方格形式进行数字化处理,其有数据的位置设为1,其他位置设为0。

如图2给出了字母A、B和C的数字化过程,然后用一个1×35的向量表示。

例如图2中字母A的数字化处理结果所得对应的向量为:

  LetterA=[00100010100101010001111111000110001]

  由此可得每个字母由35个元素组成一个向量。

由26个标准字母组成的输入向量被定义为一个输入向量矩阵alphabet,即神经网络的样本输入为一个35×26的矩阵。

其中alphabet=[letterA,letterB,lettereC,……letterZ]。

网络样本输出需要一个对26个输入字母进行区分输出向量,对于任意一个输入字母,网络输出在字母对应的顺序位置上的值为1,其余为0,即网络输出矩阵为对角线上为1的26×26的单位阵,定义为target=eye(26)。

  本文共有两类这样的数据作为输入:

一类是理想的标准输入信号;另一类是在标准输入信号中加上用MATLAB工具箱里的噪声信号,即randn函数。

3 .1网络设计及其试验分析

  为了对字母进行识别,所设计的网络具有35个输入节点和26个输出节点,对于隐含层节点的个数的选取在后面有详细的介绍。

目标误差为0.0001,从输入层到隐层的激活函数采用了S型正切函数tansig,从隐层到输出层的激活函数采用了S型对数函数logsig,这是因为函数的输出位于区间[0,1]中,正好满足网络输出的要求。

3.2隐层节点个数的确定

  根据BP网络的设计目标,一般的预测问题都可以通过单隐层的BP网络实现。

难点是隐层节点个数的选择,隐层节点数对网络的学习和计算特性具有非常重要的影响,是该网络结构成败的关键。

若隐层节点数过少,则网络难以处理复杂的问题;但若隐层节点数过多,则将使网络学习时间急剧增加,而且还可能导致网络学习过度,抗干扰能力下降。

  目前为止,还没有完善的理论来指导隐层节点数的选择,仅能根据Kolmogorov定理,和单隐层的设计经验公式[4],并考虑本例的实际情况,确定隐层节点个数应该介于8~17之间。

  本文设计了一个隐层节点数目可变的BP网络,通过误差对比,确定最佳的隐层节点个数,具体程序如下:

  [alphabet,targets]=prprob;

  p=alphabet;

  t=targets;

  s=8:

17;

  res=zeros(1,10);

  res2=zeros(1,10);

  fori=1:

10

  fprintf('s(i)=%.0fn',s(i));

  net=newff(minmax(p),[s(i),26],{'tansig','logsig'},'traingdx');

  net.trainParam.epochs=1000;

  net.trainParam.goal=0.0001;

  [net,tr]=train(net,p,t);

  y=sim(net,p);

  error=(y(1,:

)-t(1,:

)).^2;

  error2=(y(2,:

)-t(2,:

)).^2;

  res(i)=norm(error);

  res2(i)=norm(error2);

  pause

  i=i+1;

  end

通过网络的输出显示以及网络训练速度和精度因素,选取隐层节点的最佳个数为11。

3.3生成网络

  使用函数newff创建一个两层网络,具体函数为:

  [alphabet,targets]=prprob;

[R,Q]=size(alphabet);

[S2,Q]=size(targets);

P=alphabet;

S1=12;%%隐层节点数

net=newff(minmax(alphabet),[S1S2],{'logsig''logsig'},'traingdx');

net.LW{2,1}=net.LW{2,1}*0.01;

net.b{2}=net.b{2}*0.01;

T=targets;

3.4网络训练

为了使产生的网络对输入向量有一定的容错能力,最好的办法是使用理想的信号(无噪声)和带有噪声的信号对网络进行训练。

使用不同信号的训练都是通过BP网络来实现的。

因此,可首先进行无噪声网络训练,再进行有噪声字母网络训练,最后再次进行无噪声网络训练[4],具体程序如下:

%<1>无噪声字符网络的训练

net.performFcn='sse';

net.trainParam.goal=0.1;

net.trainParam.show=20;

net.trainParam.epochs=5000;

net.trainParam.mc=0.95;

P=alphabet;

T=targets;

[net,tr]=train(net,P,T);

%<2>具有噪声字符网络的训练

netn=net;

net.trainParam.goal=0.6;

net.trainParam.epochs=300;

T=[targetstargetstargetstargets];

forpass=1:

10

P=[alphabet+randn(R,Q)*0.1,alphabet+randn(R,Q)*0.2,alphabet+randn(R,Q)*0.1,alphabet+randn(R,Q)*0.2];

[netn,tr]=train(netn,P,T);

end

%<3>再次无噪声网络训练

netn.trainParam.goal=0.1;

netn.trainParam.show=5;

net.trainParam.epochs=500;

P=alphabet;

T=targets;

[netn,tr]=train(netn,P,T);

4系统性能测试

为了测试系统的可靠性,本文用了加入不同级别的噪声的字母样本作为输入,来观察用理想样本和加噪样本训练出来的网络的性能,并绘制出误识率曲线,如图4所示。

图3识别误差曲线

  

图3中虚线代表用无噪声训练网络的出错率,实线代表有噪声训练网络的出错率。

从图3可以看出,在均值为0~0.07之间的噪声环境下,两个网络都能够准确地进行识别。

当所加的噪声均值超过0.07时,待识别字符在噪声作用下不再接近于理想字符,无噪声训练网络的出错率急剧上升,此时有噪声训练网络的性能较优。

4仿真结果

对上面设计的系统进行实验仿真验证,如对字母A、C.V进行识别:

图4字母验证

程序运行结果如图5所示,奇数行是比例为30%噪声下的字母,偶数行为成功识别的字母。

图526个字母识别

5结论

本文利用BP网络对有噪声的字母进行识别和仿真,结果表明此网络具有联想记忆和抗干扰功能,对字母具有一定的辨识能力,是一种对字母识别的有效方法。

附录程序

[alphabet,targets]=prprob;

p=alphabet;

t=targets;

s=8:

17;

res=zeros(1,10);

res2=zeros(1,10);

fori=1:

10

printf('s(i)=%.0fn',s(i));

net=newff(minmax(p),[s(i),26],{'tansig','logsig'},'traingdx');

net.trainParam.epochs=1000;

net.trainParam.goal=0.0001;

[net,tr]=train(net,p,t);

y=sim(net,p);

error=(y(1,:

)-t(1,:

)).^2;

error2=(y(2,:

)-t(2,:

)).^2;

res(i)=norm(error);

res2(i)=norm(error2);

pause

i=i+1;

end

[alphabet,targets]=prprob;

[R,Q]=size(alphabet);

[S2,Q]=size(targets);

P=alphabet;

S1=11;%%隐层节点数

net=newff(minmax(alphabet),[S1S2],{'logsig''logsig'},'traingdx');

net.LW{2,1}=net.LW{2,1}*0.01;

net.b{2}=net.b{2}*0.01;

T=targets;

net.performFcn='sse';

net.trainParam.goal=0.1;

net.trainParam.show=20;

net.trainParam.epochs=5000;

net.trainParam.mc=0.95;

P=alphabet;

T=targets;

[net,tr]=train(net,P,T);

netn=net;

net.trainParam.goal=0.6;

net.trainParam.epochs=300;

T=[targetstargetstargetstargets];

forpass=1:

10

P=[alphabet+randn(R,Q)*0.1,alphabet+randn(R,Q)*0.2,alphabet+randn(R,Q)*0.1,alphabet+randn(R,Q)*0.2];

[netn,tr]=train(netn,P,T);

end

netn.trainParam.goal=0.1;

netn.trainParam.show=5;

net.trainParam.epochs=500;

P=alphabet;

T=targets;

[netn,tr]=train(netn,P,T);

noise_range=0:

.05:

.5;

max_test=100;

network1=[];

network2=[];

T=targets;

fornoiselevel=noise_range

%fprint('Testingnetworkswithnoiselevelof%.2f\n',noiselevel);

errors1=0;

errors2=0;

fori=1:

max_test;

P=alphabet+randn(35,26)*noiselevel;

A=sim(net,P);

AA=compet(A);

errors1=errors1+sum(sum(abs(AA-T)))/2;

An=sim(netn,P);

AAn=compet(An);

errors2=errors2+sum(sum(abs(AAn-T)))/2;

end

network1=[network1errors1/26/100];

network2=[network2errors2/26/100];

end

echoon

clf

plot(noise_range,network1*100,'--',noise_range,network2*100);

title('识别误差');

xlabel('噪声指标');

ylabel('无噪声训练网络--有噪声训练网络--');

noisyJ=alphabet(:

1)+randn(35,1)*0.2;%对字母A加噪声

figure

plotchar(noisyJ);%绘图

A2=sim(net,noisyJ);

A2=compet(A2);

answer=find(compet(A2)==1);

figure

plotchar(alphabet(:

answer));%输出识别结果

noisyJ=alphabet(:

3)+randn(35,1)*0.2;

figure

plotchar(noisyJ);

A2=sim(net,noisyJ);

A2=compet(A2);

answer=find(compet(A2)==1);

figure

plotchar(alphabet(:

answer));

noisyJ=alphabet(:

22)+randn(35,1)*0.2;

figure

plotchar(noisyJ);

A2=sim(net,noisyJ);

A2=compet(A2);

answer=find(compet(A2)==1);

figure

plotchar(alphabet(:

answer));

noise_percent=0.3;

fork=1:

26

noisyChar=alphabet(:

k)+randn(35,1)*noise_percent;

subplot(6,9,k+floor(k/9.5)*9);

plotchar(noisyChar);

de_noisyChar=sim(net,noisyChar);

de_noisyChar=compet(de_noisyChar);

answer=find(de_noisyChar==1);

subplot(6,9,k+floor(k/9.5)*9+9);

plotchar(alphabet(:

answer));

end

set(gcf,'Position',[10,60,900,700],'color','w')

 

第1页(共页)

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育 > 少儿英语

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1