模式识别BP神经网络设计报告.doc
课程设计任务书学生姓名: 专业班级: 指导教师: 工作单位: 题 目: 模式识别 初始条件:MATLAB 软件要求完成的主要任务: (包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)利用BP(Back-propagation)网络对于10个阿拉伯数字(用七段码表示)进行训练,将训练好的网络对于污染的数字进行识别。要求:学习BP算法;将数字用7维矢量表示;设计BP网络(7输入1输出);参考MATLAB软件神经网络工具箱。时间安排:指导教师签名: 年 月 日系主任(或责任教师)签名: 年 月 日目录摘要3Abstract41 神经网络发展历史及其应用51.1 神经网络发展历史51.2 神经网络的应用52. BP神经网络62.1 BP神经网络简介62.2 BP 神经网络的工作原理62.3 BP 神经网络的基本算法72.4 BP 神经网络算法的基本步骤102.5 BP 神经网络算法的主要特点133. MATLAB 实现BP神经网络133.1 MATLAB 的BP神经网络及其函数介绍133.2 BP 神经网络中几种重要函数及其功能144程序设计及仿真结果154.1 程序设计154.2 仿真结果175心得与体会256 参考文献26附录27摘要BP网络是神经网络的一个重要分支。它又称多层感知机或误差信号反馈网络,是目前较流行,应用最广的神经网络模型。BP网络的主要特点是能够实现从n维到m维的非线性映射。也可以说,经过训练它可以完成简单的模糊分类工作。BP神经网络的主要优点是:良好的容错能力、分类能力强、并行处理能力和自学习能力。因而,采用神经网络识别数字是一种很好的选择。本文首先对神经网络的发展历史及应用做了简单的介绍,接着对BP网络的相关知识做了概括性的介绍。最后在MATLAB 软件中,编写了进行相关识别数字的程序,并进行了仿真。 关键词:神经网络 BP网络 数字识别AbstractThe Back-propagation network is a branch of neural network. It is also called Multi-Layer Perception or Error Back-propagation Net. It is a neural network model which is widely used and in vogue present. The main characteristic of BP neural network is that it can implement nonlinear mapping from n dimension to m dimension. In other words, it can implement simply blurry classify. The brief advantage of BP Net is: Nicer tolerance capacities, Powerful classify capacities, Parallel disposal capacity and self-study capacity. So it is a very good choice using BP Net to recognize number figure. This article first introduces a developmental history and application of the neural network. Then we give a brief introduction of BP-neural network. Finally, in the MATLAB environment, we give the preparation of procedures for characteristic recognition, and simulation. Key words: neural network, BP neural network, character recognition,1 神经网络的发展历史及其应用1.1 神经网络的发展历史自1943年,心里学家McCulloch教授与数学家Pitts教授提出神经元生物学模型(简称MP-模型)以来,至今已有半个多世纪的发展历史了。在这半个多世纪里,它的发展大体可以分为以下几个阶段 :自1943年MP-模型产生起,到60年代止,这一段时间为神经网络系统的初期阶段,这时的主要特点是多种网络模型的产生与学习算法的确定。60年代末至70年代,神经网络系统理论的发展处于一个低潮时期,造成这个情况的原因是神经网络系统理论的发展出现了本质上的困难。80年代末至90年代,由于智能计算机的发展,神经网络系统理论形成一个发展热点。1.2 神经网络的应用神经网络在很多科学领域里都有很多奇妙应用,包括图像处理、自动控制、经济预测、模式识别、信号处理等等。神经网络理论的应用研究主要在模式识别、优化控制等方面;与数学、统计学中的多个学科分支发生联系,有如线性与非线性规划问题、数值逼近、统计计算等等,其内容十分丰富。总而言之,神经网络技术是一种应用广泛的科学计算,具有很高的研究价值。2 BP神经网络2.1 BP神经网络简介BP算法是80年代中期,由Rumelhart 和McCulloch教授为首提出了多层前馈网络(MFNN)的反向传播学习算法,简称BP算法,是一种有教师的学习算法。2.2 BP神经网络的工作原理BP网络是一种有教师的学习网络,它首先要以一定的学习准则学习,然后才能工作,下面简要描述一下它的学习方法。以BP网络对手写A、B两个字母的识别为例进行说明:规定当“A”输入网络时,应该输出“1”,而当“B”输入网络时,应该输出“0”,所以BP网络的学习准则应该是:如果BP网络做出错误的判决,则通过网络权值的调整,使得BP网络减少下次再出错的可能性。首先,给BP网络的各连接权值赋予(0,1)区间内的随机值,将“A”所对应的图像模式输入给BP网络,BP网络将收到的输入模式加权求和、与门限比较、再进行非线性运算,得到BP网络的输出。在此情况下,BP网络输出为“0”和“1”的概率各为百分之五十。也就是说完全随机的。这时如果输出为“1”(结果正确),则使连接权值增大,以便使BP网络是再次遇到“A”模式输入时,仍然能够做出正确的判断。如果输出为“0”(即结果正确),则把BP网络连接权值朝着减小综合输入加权值的方向调整,其目的在于使BP网络是再次遇到“A”模式输入时,减小犯同样错误的可能性。如此操作调整,当给BP网络轮番输入若干个手写字母“A”、“B”后,经过BP网络按以上学习方法进行若干次学习后,BP网络判断的正确率将大大提高。这说明BP网络对这两个模式的学习已经取得了巨大成功。它已经将这两个模式分布的记忆在BP网络的各个连接权值上。当BP网络再次遇到其中任何一个模式时,能够做出迅速、准确的判断和识别。一般说来,BP网络中所含的神经元个数越多,则它能记忆、判断、识别的模式也就越多。简言之,它的中心细想就是调整权值,以便使网络总误差最小。也就是采用梯度搜索技术,以期使网络的实际输出值与期望输出值的误差均方值为最小。多层网络运用BP 学习算法时,实际上包含了正向和反向传播两个阶段。在正向传播过程中,输入信息从输入层经隐含层逐层处理,并传向输出层,每一层神经元的状态只影响下一层神经元的状态。如果在输出层不能得到期望输出,则转入反向传播,反向传播时,把误差信号按原来正向传播的通路反向传回,并对每个隐层的各个神经元的权系数进行修改,以望误差信号趋向最小。2.3 BP神经网络的基本算法设第K层的第j个神经元的输入总和为,输出总和为,K-1层的第i个神经元与第K层的第j个神经元的连接权值为,则有以下公式: (2.3.1) (2.3.2)对于给定的任一输入模式,若网络的第K层的第j个神经元的输入误差为,则使权值沿着误差的负梯度方向变化,即有以下公式: (2.3.3)式中的是权值调整因子。这个算法的学习过程,由正向传播和反向传播组成,正向传播过程,输入模式从输入层,经隐单元层逐层处理,并传向输出层,每一层神经元的状态只影响下一层神经元的状态。如果在输出层不能得到期望的输出,则转入反向传播,将误差信号沿着原来的连接通路返回,通过修改各神经元的权值,使得误差信号最小。 具体的,其调整规则为对于每一样本p 的输入模式对的二次型误差函数为: 则系统对所有N 个训练样本的总误差函数为: 式中, N 为模式样本对数; L 为网络输出节点数。一般来说,基于Jp 还是基于J 来完成加权系数空间的梯度搜索会获得不同的结果。在Rumelhart 等人的学习加权的规则中,学习过程按使误差函数Jp减小最快的方向调整加权系数直到获得满意的加权系数集为止。这里的加权系数的修正时顺序操作的,网络对各模式对一个一个地顺序输入并不断进行学习,类似于生物神经网络的处理过程,但不是真正的梯度搜索过程。对于给定的一个样本p ,可根据误差要求调整网络的加权系数使其满足要求;对于给定的另一个样本,再根据误差要求调整网络的加权系数使其满足要求,直到所有样本作用下的误差都满足要求为止。这种计算过程称为在线学习过程。如果学习过程按使误差函数J 减小最快的方向调整加权系数,采用类似的推导过程可得输出层和隐含层的任意神经元k 和i 在所有样本作用时的加权系数增量公式为: (2.3.4) (2.3.5)根据式(2.3.4)和(2.3.5)所得权值的修正是在所有样本输入后,计算完总的误差后进行的,这种修正称为批处理学习或称为离线学习。批处理修正可保证其总误差J 向减少的方向变化,在样本多的时候,它比在线学习的收敛速度快。2.4 BP神经网络算法的基本步骤BP算法的基本步骤如下:1. 选取学习算子,一个小的正数;2. 网络权值初始化,即将较小随机数赋给权值;3. 取得训练样本及对应的教师;4. 计算由输入层到隐含层的每个神经元的加权和;5. 计算由隐含层到输入层的每个神经元的加权和,(4、5两步是正向传播过程);6. 将输出层和教师进行比较,求得误差。如果误差不满足要求,就根据此误差调整各层权值;7. 重复3到6,直到网络收敛。经过学习大量的样本,记录调整后的权值,使用此权值数据对新的样本进行识别并计算识别率。其算法流程图可如下表示:自动修正网络权值及偏置否是结束求出误差输出识别结果识别率是否满足要求对网络进行测试再次利用原始标准样本训练网络利用加入噪声的样本训练网络利用原始标准样本训练网络生成BP神经网络开始 图2.4 网络流程图2.5 BP神经网络算法的主要特点BP神经网络具有以下几个特点:1. 能够实现非线性映射;2. 采用梯度下降法实现快速收敛;3. 使用学习算子调整收敛速度,学习算子也可以称为收敛因子,在不引起震荡的情况下可以适当增大;4. 不足之处:a) 由于是非线性优化,不可避免的存在局部极小问题;b) 隐层以及隐层节点数的选择没有理论指导,只能猜测;c) 学习算法的收敛速度慢;d) 新加入的样本会影响到已经学习好的样本;e) “坏”样本对总体的训练结果有比较大的影响,因此必须慎重选择训练样本。3 MATLAB实现BP网络3.1 MATLAB的BP神经网络及其函数介绍MATLAB 神经网络工具箱提供了丰富的演示实例,用MATLAB 语言构造了典型的神经网络的激活函数,编写了各种网络设计与训练的子程序。网络的设计者可以根据自己的需要调用工具箱中有关BP神经网络设计的训练程序。MATLAB 神经网络工具箱提供了许多进行神经网络设计和分析的工具函数,这给用户带来了极大的方便,即使不了解算法的本质,也可以直接应用功能丰富的函数来实现自己的目的。有关这些工具函数的使用可以通过help 命令得到。3.2 BP神经网络中几种重要函数及其功能(1) BP 神经网络初始化函数initff()在设计一个BP 网络时,只要已知网络的输入网络的取值范围、各层的神经元的个数及传输函数,就可以利用初始化函数initff()对BP 神经网络网络进行初始化。函数initff()可最多对三层神经网络进行初始化即可得到每层的权值和偏值。其调用格式为 W1,B1,W2,B2=initff(Xr,S1,Tf1,S2,Tf2)W1,B1,W2,B2=initff(Xr,S1,Tf1,S2,Tf2,S3,Tf3)式中,Xr 为一个向量矩阵,它决定了输入向量的最小值和最大值的取值范围;S,Si 为各层神经元的个数;Tf,Tfi 为各层的传输函数;W 和Wi 为初始化后各层权值矩阵;B 和Bi 为初始化后各层的偏值向量。另外,输出层神经元的个数S 或Si 可以用对应的向量T来代替,此时输出神经元数根据T 中的行数来设置。(2)利用BP 算法训练前后网络函数trainbp()BP 神经网络学习规则为调整网络的权值和偏值使网络误差的平方和为最小。这是通过在梯度下降方向上不断地调整网络的权值和偏值来达到的。该函数的调用格式为W1,B1,W2,B2,te,tr=trainbp(w1,b1,Tf1w2,b2,Tf2,X,T,tp)式中,w 和W(及wi 和Wi)分别为训练前后的权值矩阵;b 和B(及bi 和Bi)分别为训练前后的偏值向量;te 为实际训练次数;tr 为网络训练误差平方和的行向量;Tf 和Tfi为传输函数;X 为输入向量;T 为目标向量;tp=disp_frep max_epoch err_goal lr是训练控制参数,其作用是设定如何进行训练,其中tp1)显示间隔次数,默认值为25;2)显示最大循环次数,默认值为100;3)为目标误差平方和,默认值为0.02;(3)用快速BP 算法训练前向网络函数trainbpx( )使用动量因子时,BP 算法可找到更好的解,而自适应学习率也可以使训练时间大大缩短。该函数的调用格式为W1,B1,W2,B2,te,tr=trainbpx(w1,b1,Tf1,w2,b2,Tf2,X,T,tp)式中,w 和W(及wi 和Wi)分别为训练前后的权值矩阵;b 和B(及bi 和Bi)分别为训练前后的偏值向量;te 为实际训练次数;tr 为网络训练误差平方和的行向量;Tf 和Tfi 为传输函数;X 为输入向量;T 为目标向量;tp 是训练控制参数,其作用是设定如何训练。(4)BP网络学习规则函数learnbp( ) BP 神经网络学习规则为调整网络的权值和偏值使网络误差的平方和达到最小。这是通过在梯度下降法最陡方向上不断地调整网络的权值和偏值来达到的,计算网络输出层的误差矢量导数,然后反馈回网络,直到每个隐含层的误差导数都达到要求,这可根据函数deltatan()、deltalin()、和deltalog()计算。根据BP 准则,每一层的权值矩阵w 利用本层的误差导数矢量和输入向量来更新。该函数的调用格式为 dW,dB=learnbp(X,delta,lr)。式中,X 为本层的输入向量;delta 为误差导数矢量;lr 为学习速率;dW 为权值修正阵;dB 为偏值修正向量。(5)BP 神经网络仿真函数simuff()BP 神经网络由一系列网络层组成。每一层都从前一层得到输入数据。Simuff()函数可仿真最多三层前向网络。其调用格式为y=simuff(X,w,b,Tf,)或y1,y2=simuff(X,w1,b1,Tf1,w2,b2,Tf2)式中,X 为输入向量;w,wi 为权值矩阵;b,bi 为偏值矩阵;Tf,Tfi 为传输函数;y,yi为各层的输入向量矩阵4 程序设计及仿真结果4.1 程序设计(1)首先创建一个两层网络。先用理想的输入信号对网络进行训练,直到平方和误差足够小。接下来,用理想信号和带有噪声的信号对网络进行训练。在输入带有误差的向量时,要输入两倍重复的无误差信号,这样做的目的是为了保证网络的稳定性。(2)对无噪声信号的训练。使用原始标准的信号对网络进行训练,当训练时间达到1000个时间单位或者是网络平方和误差小于0.01时停止网络的训练。(3)对含有噪声信号的训练。用标准的数字向量和加噪声的信号向量分别训练网络,设置噪声信号平均值分别为0.1和0.2。(4)再次对无噪声信号进行训练。为了保证网络总是能够正确地对理想输入进行分类,我们需要再一次用无噪声的理想信号对网络进行训练(5)对污染数字进行识别。4.2 仿真结果 图4.2.1 训练过程图1 图4.2.2 训练过程图2 图4.2.3 训练过程图3 图4.2.4 训练过程图4 图4.2 训练过程图(1)对原始标准信号的训练结果:(2)对含有噪声的信号的训练结果 图4.3 对污染数字的识别图 此时,error=0.45. 可以看出,大部分被污染的数字都可以被识别出来。但有一个识别错误,将8识别成了6, 进一步说明了BP神经网络的局限性。5 心得体会本次课程设计主要任务是完成BP神经网络的设计,对我来说这个题目还是很有挑战性的,因为自己对MATLAB中有关BP神经网络的设计知识了解较少,但正是这种有挑战性的题目才能提高自己的能力,才有研究价值,入手这个题目后我查阅了相关的资料,也从网上获得了不少有关MATLAB设计BP神经网络的资料,加上自己之间对MATLAB有一定的了解,因而设计思路渐渐明朗,经过自己的不断尝试和探索,终于弄明白了BP神经网络的工作原理,通过查阅相关资料和研究MATLAB中提供的帮助信息,我也明白了BP神经网络设计相关的一些函数的使用方法,并用它们来设计BP神经网络,最终完成了题目。在设计过程中,我也遇到了很多不懂的地方,程序经常出现错误,但经过自己的不断努力和尝试,最终还是解决了问题。总之,通过本次课程设计,我收获很大,不只是学会了用MATLAB设计BP神经网络,而是学会了自己学习新知识的一种方法。通过这次学习,我不但掌握了BP神经网络的基本知识及其实际应用,而且还学会了一些MATLAB编程语言,对这款软件也有了更深刻的认识。最后,我认为学校开设这门课设对我们来说是很有用的,能够提高我们独立去做一个工程的能力,体会将来我们要面对的实际问题,这对日后我们走进社会,参加工作是非常重要的。6 参考文献1 曹旭帆,胡同森. 基于BP 神经网络的含噪字符识别系统及MATLAB 实现.2 李士勇. 模糊控制神经控制和智能控制论M. 哈尔滨: 哈尔并工业大学出版社,3 李晓歌,邵丽红,李娜. 人工神经网络BP 算法的实现4 曲婷婷. 基于BP神经网络的有噪数字识别5 黄巧巧. 基于BP神经网络的手写数字识别系统研究附录设计代码如下:number0= 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0; % 11 1 1 1 1 0 0 0 0 1 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 1 0 0 0 0 1 1 1 1 1; % 21 1 1 1 1 0 0 0 0 1 0 0 0 0 1 1 1 1 1 1 0 0 0 0 1 0 0 0 0 1 1 1 1 1 1; % 31 0 1 0 0 1 0 1 0 0 1 0 1 0 0 1 1 1 1 1 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0; % 41 1 1 1 1 1 0 0 0 0 1 0 0 0 0 1 1 1 1 1 0 0 0 0 1 0 0 0 0 1 1 1 1 1 1; % 51 1 1 1 1 1 0 0 0 0 1 0 0 0 0 1 1 1 1 1 1 0 0 0 1 1 0 0 0 1 1 1 1 1 1; % 61 1 1 1 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1; % 71 1 1 1 1 1 0 0 0 1 1 0 0 0 1 1 1 1 1 1 1 0 0 0 1 1 0 0 0 1 1 1 1 1 1; % 81 1 1 1 1 1 0 0 0 1 1 0 0 0 1 1 1 1 1 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1; % 91 1 1 1 1 1 0 0 0 1 1 0 0 0 1 1 0 0 0 1 1 0 0 0 1 1 0 0 0 1 1 1 1 1 1; % 0number=number0; targets=eye(35); targets;%下面创建一个两层网络。S1=10;R,Q=size(number);S2,Q=size(targets);P=number;net=newff(minmax(P),S1,S2,'logsig' 'logsig','traingdx'); net.LW2,1=net.LW2,1*0.01;net.b2=net.b2*0.01;%下面对原始标准信号进行训练%训练结束条件:最大次数1000,误差平方和为0.01;P=number;T=targets;net.performFcn='sse'net.trainParam.goal=0.01; net.trainParam.show=10; net.trainParam.epochs=1000; net.trainParam.mc=0.95; net,tr=train(net,P,T);%下面进行含噪声信号的训练netn=net;netn.trainParam.goal=0.005;netn.trainParam.epochs=5000;T=targets targets targets targets;for i=1:10 P=number,number,(number+randn(R,Q)*0.1),(number+randn(R,Q)*0.2);netn,tr=train(netn,P,T);end%下面网络再次对标准信号进行训练P=number;T=targets;netn.performFcn='sse'netn.trainParam.goal=0.01;netn.trainParam.show=10;netn.trainParam.epochs=1000;netn.trainParam.mc=0.95;netn,tr=train(netn,P,T);%下面代码用来测试网络正确率noise_range=0:0.01:0.35;max_test=100;T=targets;for i=1:10 noise_level(i)=noise_range(i); errors1(i)=0; errors2(i)=0; for j=1:max_test P=number+randn(35,10).*noise_level(i); A=sim(net,P); AA=compet(A); errors1(i)=errors1(i)+sum(sum(abs(AA-T)/2; An=sim(netn,P); AAn=compet(An); errors2(i)=errors2(i)+sum(sum(abs(AAn-T)/2; end;end;correct1=1-errors1/1000;correct2=1-errors2/1000;figure(1);plot(noise_range,correct1,'r-',noise_range,correct2);title('识别率');xlabel('噪声指标');ylabel('未经误差训练的网络 - 经过误差训练的网络-');figure(2);err=0.45;for index=1:1:10 noisyJ=number(:,index)+randn(35,1)*err; e=index; subplot(4,5,e); plotchar(noisyJ); A2=sim(net,noisyJ); A2=compet(A2); answer=find(compet(A2)=1); subplot(4,5,e+10); plotchar(number(:,answer);end;本科生课程设计成绩评定表姓 名 性 别 专业、班级 课程设计题目:模式识别课程设计答辩或质疑记录:成绩评定依据:最终评定成绩(以优、良、中、及格、不及格评定)指导教师签字: 年 月 日