用BP网络算法实现对含噪声0到9数字的识别

上传人:沈*** 文档编号:133231245 上传时间:2022-08-09 格式:DOC 页数:18 大小:187KB
收藏 版权申诉 举报 下载
用BP网络算法实现对含噪声0到9数字的识别_第1页
第1页 / 共18页
用BP网络算法实现对含噪声0到9数字的识别_第2页
第2页 / 共18页
用BP网络算法实现对含噪声0到9数字的识别_第3页
第3页 / 共18页
资源描述:

《用BP网络算法实现对含噪声0到9数字的识别》由会员分享,可在线阅读,更多相关《用BP网络算法实现对含噪声0到9数字的识别(18页珍藏版)》请在装配图网上搜索。

1、 用BP算法实现数字字符(0-9)辨认F0303033班 戴海鹏 人工智能导论字符辨认是模式辨认领域的一项老式的课题,这是由于字符辨认不是一种孤立的问题,而是模式辨认领域中大多数课题都会遇到的基本问题,并且在不同的课题中,由于具体的条件不同,解决的措施也不尽相似,因而字符辨认的研究仍具有理论和实践意义。这里讨论的是用神经网络辨认数字的问题. 人工神经网络模式辨认措施是近些年提出的新措施,为字符辨认研究提供了一种新手段,它具有某些老式技术所没有的长处:良好的容错能力、分类能力强、并行解决能力和自学习能力。因而,采用神经网络辨认方式是一种较好的选择。神经网络的字符辨认系统是神经网络模式辨认系统的一

2、种,原理是一致的。一般神经网络字符辨认系统由预解决,特性提取和神经网络分类器构成。预解决就是将原始数据中的无用信息删除,平滑,二值化和进行幅度归一化等。神经网络字符辨认系统中的特性提取部分不一定存在,这样就分为两大类:(1)有特性提取部分的:这一类系统事实上是老式措施与神经网络措施技术的结合,这种措施可以充足运用人的经验来获取模式特性以及神经网络分类能力来辨认字符。特性提取必须能反映整个字符的特性。但它的抗干扰能力不如第2类。(2)无特性提取部分的:省去特性抽取,整个字符直接作为神经网络的输入(有人称此种方式是使用字符网格特性),这种方式下,系统的神经网络构造的复杂度大大增长了,输入模式维数的

3、增长导致了网络规模的庞大。此外,神经网络构造需要完全自己消除模式变形的影响。但是网络的抗干扰性能好,辨认率高。构造神经网络分类器一方面要选择合适的网络构造:神经网络分类器的输入就是数字字符的特性向量;神经网络分类器的输出节点应当是字符数。10个数字输出层就有个10个神经元,每个神经元代表一种数字;隐层数要选好,每层神经元数要合适,目前有诸多采用一层隐层的网络构造。然后要选择合适的学习算法,这样才会有较好的辨认效果。在学习阶段应当用大量的样本进行训练学习,通过样本的大量学习对神经网络的各层网络的连接权值进行修正,使其对样本有对的的辨认成果,这就像人记数字同样,网络中的神经元就像是人脑细胞,权值的

4、变化就像是人脑细胞的互相作用的变化,神经网络在样本学习中就像人记数字同样,学习样本时的网络权值调节就相称于人记住各个数字的形象,网络权值就是网络记住的内容,网络学习阶段就像人由不结识数字到结识数字反复学习过程是同样的。神经网络是按整个特性向量的整体来记忆数字的,只要大多数特性符合曾学习过的样本就可辨认为同一字符,因此当样本存在较大噪声时神经网络分类器仍可对的辨认。在字符辨认阶段,只要将输入进行预解决,特性提取后的特性向量作为神经网络分类器的输入,通过网络的计算,分类器的输出就是辨认成果。 这里我们采用BP神经网络来进行车辆字符的辨认。BP网络是采用Widrow-Hoff学习算法和非线性可微转移

5、函数的多层网络。一种典型的BP网络采用的是梯度下降算法,也就是Widrow-Hoff算法所规定的。backpropagation就是指的为非线性多层网络计算梯度的措施。一种典型的BP网络构造如图所示:我们将它用向量图表达如下: 其中:对于第k个模式对,输出层单元的j的加权输入为 ,该单元的实际输出为 ,而隐含层单元i的加权输入为 ,该单元的实际输出为 ,函数f为可微分递减函数 。其算法描述如下:(1)初始化网络及学习参数,如设立网络初始权矩阵、学习因子等。(2)提供训练模式,训练网络,直到满足学习规定。(3)前向传播过程:对给定训练模式输入,计算网络的输出模式,并与盼望模式比较,若有误差,则执

6、行(4);否则,返回(2)。(4)后向传播过程:a.计算同一层单元的误差;b.修正权值和阈值;c.返回(2)我采用Matlab来模拟用神经网络进行车牌照数字辨认这一过程。作为对比,一种采用提取特性部分的措施,一组采用无特性部分提取的措施。 下面就开始用BP网络的思想来设计实现一种真正的实际的神经网络。BP网络的一种重要的用途就是用于模式辨认。我们的任务是要设计并训练出一种可行、高效的BP网络,以实现对0到9共10个加噪声后的数字和辨认。这里,数字采用了55共25点阵的形式,使用美观的数码管字体。一方面,要选择一种编码方式。这里规定的是点阵直接01编码的方式。 例如,对于数字1,可以编码为:0

7、0 1 0 00 0 1 0 00 0 1 0 00 0 1 0 00 0 1 0 0但是,上图只是抱负图像系统得到的成果,实际中的图像系统总会存在某些噪声干扰或者是非线性因素。设计的网络要不仅可以对抱负的输入向量进行较好的分类,也要对具有误差的输入向量有合理的精确度。在本问题中,10个含25个元素的输入向量被定义成一种输入向量矩阵number。目的向量也被定义成一种变量targets,每个目的向量具有10个元素。向量代表某个数字,则其相应位置的元素值为1,而其她位置的元素值为0。例如,数字0相应的向量,其第一种位置的元素值为1(由于0是数字09中的第一种数字),而从第210个位置的元素值均为

8、0。设计的网络把25个布尔值作为一种具有25个元素的输入向量。需要网络通过输出一种具有10个元素的输出向量来辨别数字。这个10元素向量的每一种代表着一种数字。在正常运营的状况下,对于一种输入数字,网络要能输出一种向量,它的相应位置元素值为1,其她的值为0。除此之外,网络还必须可以有容错能力。在实际中,网络不也许接受到一种抱负的布尔向量作为输入。假设设计的网络可以有一定的容错能力,对于输入向量,若其噪声均值为0,原则差不不小于0.2,则可以辨别出来。为了辨别数字,所设计的网络需要有25个输入,在输出层,则需要有10个神经元。我们设计一种有两层构造的log-sigmoid/log-sigmoid网

9、络。之因此选择log-sigmoid函数,是由于它的输出范畴(0到1)正好适合学习后输出布尔值。在网络的隐含层(第一层)设计了10神经元。有关神经元的数组选择不仅需要经验也还要有猜想的成分。训练网络就是要使其将输出向量中对的的位置设立为1,其他位置全为0。然而,由于噪声信号的引入,网络就也许不会输出对的的1或0信号。在网络被训练后,将带有噪声的数字信号输入网络,就会在对的的位置上得到1和0。当数字数据混入噪声时,可以看作是对0、1数据进行简朴的随机反转。例如说,要加入10%的噪声,那就可以对2至3个0或者1进行反转。反转哪一种,这里是随机的。如上图,经噪声干扰后的0编码为:0 0 1 1 00

10、 0 1 0 00 1 1 0 00 0 1 0 00 0 0 0 0 图中,加下划线的斜体部分就是噪声。在编程时实际的做法是将均匀分布的噪声叠加在训练样本上,例如加噪10%时,对于每个节点:一. Matlab编程1.1.使用函数newff创立一种两层网络。S1=10;R,Q=size(number);S2,Q=size(targets);Pnumber;net=newff(minmax(P),S1 S2,logsiglogsig,traingdx);net.LW2,1=net.LW2,1*0.01;net.b2=net.b2*0.01;为了使产生的网络对输入向量有一定的容错能力,最佳的措施是

11、既使用抱负的信号和又使用带有噪声的信号对网络进行训练。我们的具体做法是先用抱负的输入信号对网络进行训练,直到平方和误差足够小。接下来,使用10组抱负信号和带有噪声的信号对网络进行训练。在输入带有误差的向量时,要输入两倍反复的无误差信号,这样做的目的是为了保证网络在辨别抱负输入向量时的稳定性。在网络进行了上述的训练后来,网络对无误差的信号也许也会采用对付带有噪声信号的措施。这样做就会付出较大的代价。因此,我们可以再一次训练网络。这一次就只使用抱负的向量进行训练。这样就可以保证在输入端输入抱负数字信号时,网络可以最佳地对其做出反映。以上所有的训练都是使用BP网络来实现的。网络学习的速率和冲量参数设

12、立为自适应变化。使用函数trainbpx进行迅速训练。1.2.无噪声的训练开始时使用无噪声的信号对网络进行训练。当训练时间达到5000个时间单位或者是网络平方和误差不不小于0.001时停止网络的训练。输入训练样本为:number1=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; % 1 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 1 1 1 1 1; % 2 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1; % 3 1 0 1 0 0 1 0 1 0 0

13、 1 1 1 1 1 0 0 1 0 0 0 0 1 0 0; % 4 1 1 1 1 1 1 0 0 0 0 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1; % 5 1 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 0 0 0 1 1 1 1 1 1; % 6 1 1 1 1 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1; % 7 1 1 1 1 1 1 0 0 0 1 1 1 1 1 1 1 0 0 0 1 1 1 1 1 1; % 8 1 1 1 1 1 1 0 0 0 1 1 1 1 1 1 0 0 0 0 1 0 0

14、0 0 1; % 9 1 1 1 1 1 1 0 0 0 1 1 0 0 0 1 1 0 0 0 1 1 1 1 1 1; % 0的转置。输出目的向量为:targets=1 0 0 0 0 0 0 0 0 0; 0 1 0 0 0 0 0 0 0 0; 0 0 1 0 0 0 0 0 0 0; 0 0 0 1 0 0 0 0 0 0; 0 0 0 0 1 0 0 0 0 0; 0 0 0 0 0 1 0 0 0 0; 0 0 0 0 0 0 1 0 0 0; 0 0 0 0 0 0 0 1 0 0; 0 0 0 0 0 0 0 0 1 0; 0 0 0 0 0 0 0 0 0 1;训练过程误差

15、变化状况可通过MATLAB进行观测。下面进行无噪声训练,训练结束条件:最大次数5000,误差平方和为0.001;P=number;T=targets;net.performFcn=sse;net.trainParam.goal=0.001;net.trainParam.show=10;net.trainParam.epochs=5000;net.trainParam.mc=0.95;net,tr=train(net,P,T);从Matlab 程序运营主窗口可以得到一次训练过程的误差变化状况如下:TRAINGDX, Epoch 0/5000, SSE 24.6758/0.001, Gradien

16、t 11.1211/1e-006TRAINGDX, Epoch 10/5000, SSE 14.9317/0.001, Gradient 6.45664/1e-006TRAINGDX, Epoch 20/5000, SSE 10.3002/0.001, Gradient 2.71067/1e-006TRAINGDX, Epoch 30/5000, SSE 8.8988/0.001, Gradient 0.935004/1e-006TRAINGDX, Epoch 40/5000, SSE 8.6348/0.001, Gradient 0.647037/1e-006TRAINGDX, Epoch

17、50/5000, SSE 8.5208/0.001, Gradient 0.71758/1e-006TRAINGDX, Epoch 60/5000, SSE 8.21807/0.001, Gradient 0.779685/1e-006TRAINGDX, Epoch 70/5000, SSE 7.59446/0.001, Gradient 0.723299/1e-006TRAINGDX, Epoch 80/5000, SSE 6.83991/0.001, Gradient 0.867937/1e-006TRAINGDX, Epoch 90/5000, SSE 5.58366/0.001, Gr

18、adient 0.653499/1e-006TRAINGDX, Epoch 100/5000, SSE 4.06306/0.001, Gradient 0.56084/1e-006TRAINGDX, Epoch 110/5000, SSE 2.53431/0.001, Gradient 0.38593/1e-006TRAINGDX, Epoch 120/5000, SSE 1.17375/0.001, Gradient 0.295479/1e-006TRAINGDX, Epoch 130/5000, SSE 0.322258/0.001, Gradient 0.114873/1e-006TRA

19、INGDX, Epoch 140/5000, SSE 0.0754051/0.001, Gradient 0.0374297/1e-006TRAINGDX, Epoch 150/5000, SSE 0.0248915/0.001, Gradient 0.0143682/1e-006TRAINGDX, Epoch 160/5000, SSE 0.0108384/0.001, Gradient 0.00538902/1e-006TRAINGDX, Epoch 170/5000, SSE 0.00593896/0.001, Gradient 0.00301417/1e-006TRAINGDX, Ep

20、och 180/5000, SSE 0.00367134/0.001, Gradient 0.00179562/1e-006TRAINGDX, Epoch 190/5000, SSE 0.0023838/0.001, Gradient 0./1e-006TRAINGDX, Epoch 200/5000, SSE 0.00160969/0.001, Gradient 0./1e-006TRAINGDX, Epoch 210/5000, SSE 0.00110437/0.001, Gradient 0./1e-006TRAINGDX, Epoch 213/5000, SSE 0.00098557/

21、0.001, Gradient 0./1e-006TRAINGDX, Performance goal met.Ep的收敛曲线为:1.3.具有噪声信号的训练为了保证设计的网络对噪声不敏感,可用抱负的数字向量和加了噪声的数字表向量分别训练网络。设立向数字表加入的噪声信号平均值分别为0.1和0.2。这样就可以保证神经元网络学会在辨别带噪声信号的数字表向量时,也能对抱负的数字向量有对的的辨认。此外,设立网络对含噪声信号的向量进行训练的最大时间为1个单位时间,并且把误差参数也增长到0.006。之因此要提高误差参数,是由于这次的训练向量(其中某些向量具有误差)增长了四倍。1.4.再次对无噪声信号训练上面

22、已经用含噪声的信号对网络进行了训练,为了保证网络总是可以对的地对抱负输入进行分类,我们需要再一次用无噪声的抱负信号对网络进行训练。其代码如下:P=number;T=targets;net.performFcn=sse;net.trainParam.goal=0.001;net.trainParam.show=10;net.trainParam.epochs=5000;net.trainParam.mc=0.95;net,tr=train(net,P,T);二 系统性能评估为了测试我们设计的网络模式辨认系统的可靠性,我们用数百个加入了不同数量的噪声的数字向量作为输入,来观测其输出成果。(系统性能

23、评估的代码见附页)在本问题中,使用不同级别的误差信号,并且绘制理论网络辨认率与噪声信号的比较的曲线。如下图所示:加到网络输入向量上的噪声均值为0,原则差范畴为00.5。在每个噪声级别上,分别有100个不同版本的噪声信号被加到每个数字向量上,然后用设计的网络计算其输出。将输出通过竞争传递函数,保证10个输出(代表09中的数字)中只有一种的值为1,其他均为0。上图中靠上的红线显示的是既通过噪声信号又通过非噪声信号训练后的网络的可靠性。而靠下的蓝线显示的则是同样的网络只通过非噪声信号而没有通过噪声信号训练的网络的可靠性。从以上的曲线可以看出,网络通过含噪声信号的输入训练后,其容错能力有了较明显的增强

24、。它们各自在加噪为10%、20%和30%是的辨认率用表格表达为:辨认率加噪为10%加噪为20%加噪为30%既通过噪声信号又通过非噪声信号训练后的网络77.9%54.6%34.0%只通过非噪声信号而没有通过噪声信号训练的网络73.1%49.0%29.8%当输入向量的误差平均值为0或0.05时,网络辨认没有错误。但是当误差平均值达到0.2时,两个网络都开始产生误差。如果需要有更高的精度,一种措施是增长网络的训练时间,另一种措施是增长网络隐含层的神经元数目。固然,把输入的数字向量从55的网格增长到66的网络也是一种措施。此外,如果网络规定对误差信号有更高的可靠性,还可以在训练时增长输入向量的误差的数

25、量。为了测试系统,可实验几种实际的数字,并对它们加入误差信号,然后把它们输入到网络中,观测其得到的输出,如下图所示:加噪为10%时,辨认1、2、3的成果为:加噪为20%时,辨认1、2、3的成果为:加噪为30%时,辨认1、2、3的成果为:由图可以看出,网络较对的地辨认了这些数字。因此本设计是比较成功的。源程序为:% number1 10 X 25 为系统输入的转置number1=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; % 1 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 1 1 1 1 1; % 2

26、1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1; % 3 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; % 4 1 1 1 1 1 1 0 0 0 0 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1; % 5 1 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 0 0 0 1 1 1 1 1 1; % 6 1 1 1 1 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1; % 7 1 1 1 1 1 1 0 0 0 1 1 1 1

27、 1 1 1 0 0 0 1 1 1 1 1 1; % 8 1 1 1 1 1 1 0 0 0 1 1 1 1 1 1 0 0 0 0 1 0 0 0 0 1; % 9 1 1 1 1 1 1 0 0 0 1 1 0 0 0 1 1 0 0 0 1 1 1 1 1 1; % 0number=number1;% number 为系统输入矢量targets=eye(10);% targets 为目的矢量%下面使用函数newff创立一种两层网络。S1=10;R,Q=size(number);S2,Q=size(targets);P=number;net=newff(minmax(P),S1 S2,l

28、ogsig logsig,traingdx);net.LW2,1=net.LW2,1*0.01;net.b2=net.b2*0.01;%下面进行无噪声训练%训练结束条件:最大次数5000,误差平方和为0.001;P=number;T=targets;net.performFcn=sse;net.trainParam.goal=0.001;net.trainParam.show=10;net.trainParam.epochs=5000;net.trainParam.mc=0.95;net,tr=train(net,P,T);%下面进行含噪声信号的训练netn=net;netn.trainPar

29、am.goal=0.006;netn.trainParam.epochs=1;T=targets targets targets targets;for pass=1:10 E1=rand(25,10); E2=rand(25,10); for m=1:25 for n=1:10 if(E1(m,n)*10010) E1(m,n)=1; else E1(m,n)=0; end; if(E2(m,n) *10020) E2(m,n)=1; else E2(m,n)=0; end; end; end; P=number,number,. rem(number+E1,2),. rem(number+

30、E2,2);netn,tr=train(netn,P,T);end%下面网络再次对无误差输入信号进行训练P=number;T=targets;netn.performFcn=sse;netn.trainParam.goal=0.001;netn.trainParam.show=10;netn.trainParam.epochs=5000;netn.trainParam.mc=0.95;netn,tr=train(netn,P,T);%pause;%下面代码用来测试网络容错性noise_range=0:0.05:0.5;max_test=100;T=targets;for i=1:11 nois

31、e_level(i)=noise_range(i); errors1(i)=0; errors2(i)=0; for j=1:max_test E=rand(25,10); for m=1:25 for n=1:10 if(E(m,n)noise_range(i) E(m,n)=1; else E(m,n)=0; end; end; end; P=rem(number+E,2); %测试未经误差训练的网络 A=sim(net,P); AA=compet(A); errors1(i)=errors1(i)+sum(sum(abs(AA-T)/2; %测试通过误差训练的网络 An=sim(netn

32、,P); AAn=compet(An); errors2(i)=errors2(i)+sum(sum(abs(AAn-T)/2; end;end;%pausecorrect1=1-errors1/1000;correct2=1-errors2/1000;figureplot(noise_range,correct1,r-,noise_range,correct2);title(辨认率);xlabel(噪声指标);ylabel(未经误差训练的网络 - 通过误差训练的网络-);%对实际含噪声的数字进行辨认err=0.3; for index=1:1:3 E=rand(25,1); for m=1:

33、25 if(E(m,1)err) E(m,1)=1; else E(m,1)=0; end; end; noisyJ=rem(number(:,index)+E,2); e=index; subplot(2,3,e); plotchar(noisyJ); A2=sim(net,noisyJ); A2=compet(A2); answer=find(compet(A2)=1); subplot(2,3,e+3); plotchar(number(:,answer); end;fprintf(程序运营成功结束!);附:此外尚有一种理解噪声的方式,即觉得所加载的噪声是正态分布的,当加噪为10%时,就

34、是将原则正态分布的噪声乘以10%叠加在训练样本上,例如加噪10%的噪声可觉得:0.1157 -0.0408 -0.1564 0.2796 0.13980.1724 0.0627 -0.2090 -0.0606 -0.08630.0344 -0.0579 -0.0468 0.0583 -0.03260.0585 -0.0320 -0.1959 -0.1036 0.14710.1770 0.1310 -0.0191 -0.0718 -0.0347这是的Matlab编程与前面的措施相比较为简朴,相对的区别是输入的训练样本为:P=number+randn(25,10)*noise_level(i);而

35、之上的输入训练样本表达形式为:E=rand(25,10); for m=1:25 for n=1:10 if(E(m,n)noise_range(i) E(m,n)=1; else E(m,n)=0; end; end; end; P=rem(number+E,2);类似的,使用不同级别的误差信号,并且绘制理论网络辨认率与噪声信号的比较的曲线。如下图所示:上图中靠上的红线显示的是既通过噪声信号又通过非噪声信号训练后的网络的可靠性。而靠下的蓝线显示的则是同样的网络只通过非噪声信号而没有通过噪声信号训练的网络的可靠性。各自在加噪为10%、20%和30%是的辨认率用表格表达为:辨认率加噪为10%加噪

36、为20%加噪为30%既通过噪声信号又通过非噪声信号训练后的网络100%98.7%89.3%只通过非噪声信号而没有通过噪声信号训练的网络100%98.2%89.0%可见,用这种方式理解的噪声的辨认率比之前的辨认率大大提高了。加噪为10%时,辨认1、2、3的成果为:加噪为20%时,辨认1、2、3的成果为:加噪为30%时,辨认1、2、3的成果为:源程序为:% number1 10 X 25 为系统输入的转置number1=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; % 1 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 0 0

37、 0 0 1 1 1 1 1; % 2 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1; % 3 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; % 4 1 1 1 1 1 1 0 0 0 0 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1; % 5 1 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 0 0 0 1 1 1 1 1 1; % 6 1 1 1 1 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1; % 7 1 1 1

38、 1 1 1 0 0 0 1 1 1 1 1 1 1 0 0 0 1 1 1 1 1 1; % 8 1 1 1 1 1 1 0 0 0 1 1 1 1 1 1 0 0 0 0 1 0 0 0 0 1; % 9 1 1 1 1 1 1 0 0 0 1 1 0 0 0 1 1 0 0 0 1 1 1 1 1 1; % 0number=number1;% number 为系统输入矢量targets=eye(10);% targets 为目的矢量%下面使用函数newff创立一种两层网络。S1=10;R,Q=size(number);S2,Q=size(targets);P=number;net=new

39、ff(minmax(P),S1 S2,logsig logsig,traingdx);net.LW2,1=net.LW2,1*0.01;net.b2=net.b2*0.01;%下面进行无噪声训练%训练结束条件:最大次数5000,误差平方和为0.001;P=number;T=targets;net.performFcn=sse;net.trainParam.goal=0.001;net.trainParam.show=10;net.trainParam.epochs=5000;net.trainParam.mc=0.95;net,tr=train(net,P,T);%下面进行含噪声信号的训练ne

40、tn=net;netn.trainParam.goal=0.006;netn.trainParam.epochs=6000;T=targets targets targets targets;for pass=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.001;netn.train

41、Param.show=10;netn.trainParam.epochs=5000;netn.trainParam.mc=0.95;netn,tr=train(netn,P,T);%pause;%下面代码用来测试网络容错性noise_range=0:0.05:0.5;max_test=100;T=targets;for i=1:11 noise_level(i)=noise_range(i); errors1(i)=0; errors2(i)=0; for j=1:max_test P=number+randn(25,10)*noise_level(i); %测试未经误差训练的网络 A=sim

42、(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;%pausecorrect1=1-errors1/1000;correct2=1-errors2/1000;figureplot(noise_range,correct1,r-,noise_range,correct2);title(辨认率);xlabel(噪声指标);yl

43、abel(未经误差训练的网络 - 通过误差训练的网络-);%对实际含噪声的数字进行辨认err=0.3; for index=1:1:3 noisyJ=number(:,index)+randn(25,1)*err; e=index; subplot(2,3,e); plotchar(noisyJ); A2=sim(net,noisyJ); A2=compet(A2); answer=find(compet(A2)=1); subplot(2,3,e+3); plotchar(number(:,answer); end;fprintf(程序运营成功结束!); F0303033班 戴海鹏 -12-27

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!