BP神经网络实例

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

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

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

资源描述

智能控制101234567-1-0.8-0.6-0.4-0.200.20.40.60.81学习曲线xy=cos(x)BP神经网络实例分析一、实例要求1、1()cos(),(0,2)fxxx取九个点来训练网络,然后得出拟合曲线。2、2()sin(),(0,2)fxxx取适当数量训练点来训练网络,然后得出拟合曲线3、3sinsin,;,(10,10)xyfxyxyxy取11*11个点来训练网络,并用21*21个点测试拟合的曲面。二、计算结果如下1、第一个函数:1()cos(),(0,2)fxxx(1)学习率为0.2,训练次数为3300时训练过程如学习曲线所示,圈圈为学习后产生的,折线为标准函数点连线。检验过程如检验曲线所示,点序列为拟合曲线上01234567-1-0.8-0.6-0.4-0.200.20.40.60.81检验曲线xy=cos(x)020040060080010001200140000.511.522.53误差曲线训练次数误差值智能控制2的点,曲线为标准函数曲线。误差曲线如右图所示。(2)学习率为0.01,训练次数为3300时的曲线。从函数1可以看出,学习率比较大时,曲线收敛比较快,可以比较快速达到精度要求。但实际上,学习率比较大时(即收敛步长比较大),容易超出收敛边界,反而收敛导致不稳定,甚至发散。2、第二个函数:2()sin(),(0,2)fxxx(1)学习率为0.2,样本点数为10,学习次数为5000时的曲线如下:01234567-1-0.500.511.5学习曲线xy=cos(x)01234567-1-0.500.511.5检验曲线xy=cos(x)050010001500200025003000350000.511.522.533.54误差曲线训练次数误差值0123456700.20.40.60.811.21.4学习曲线xy=cos(x)0123456700.20.40.60.811.21.4检验曲线xy=cos(x)智能控制3(2)学习率为0.2,样本点数为30,学习次数为5000时的曲线如下:从函数2可以看出,样本点个数越多时,曲线精度越高。但学习时间会有所增加。3、第三个函数05001000150020002500300035004000450050000.40.50.60.70.80.911.1误差曲线训练次数误差值01234567-0.200.20.40.60.811.2学习曲线xy=cos(x)01234567-0.200.20.40.60.811.2检验曲线xy=cos(x)050010001500200025003000350040004500500000.20.40.60.811.21.4误差曲线训练次数误差值智能控制43sinsin,;,(10,10)xyfxyxyxy学习率为0.1,动量项学习率为0.05,训练次数为5000,训练样本数为11*11。图形如下:051015051015-0.500.511.5学习实际输出051015051015-0.500.51学习期望输出智能控制50102001020-101检验期望输出0102001020-202检验实际输出05001000150020002500300035004000450050000510误差曲线智能控制6附:程序源代码第一个和第二个函数的程序:%此BP网络为两层隐含层,每个隐含层4个节点。输入输出各一层%输入层和输出层均采用恒等函数,隐含层采用S形函数clearall;closeall;b=0.01;%精度要求a=0.2;%学习率c=2;Num=30;%训练样本数N=3300;%训练次数Nj=80;%检验样本数o0=rand(2,1);%输入层阈值o1=rand(4,1);%第一层隐含层阈值o2=rand(4,1);%第二层隐含层阈值o3=rand(1,1);%输出层阈值w1=rand(4,2);%输入信号为两个w2=rand(4,4);%第一层隐含层与第二层隐含层的权系数w3=rand(1,4);%第二层隐含层与输出层的权系数symsxy;%符号变量,用于两个输入值%fcn=cos(x);%被学习的函数fcn=abs(sin(x));x0=0:2*pi/(Num-1):2*pi;%输入的训练样本y0=0:2*pi/(Num-1):2*pi;x=x0;y=y0;X(1,:)=x0;X(2,:)=y0;yf=eval(fcn);%输出的训练样本x3=zeros(1,Num);time=0;forj=1:1:Nfori=1:1:Num%前向计算:s1=w1*X(:,i)-o1;x1=1./(1+exp(-s1));%第一层隐含层输出s2=w2*x1-o2;x2=1./(1+exp(-s2));%第二层隐含层输出智能控制7s3=w3*x2-o3;%x3=1./(1+exp(-s3));%输出层输出x3(i)=s3;%反向计算:%e3=(yf(i)-x3)./(exp(s3)+2+exp(-s3));%输出层误差e3=yf(i)-x3(i);e2=((w3)'*e3)./(exp(s2)+2+exp(-s2));%第二层隐含层误差e1=((w2)'*e2)./(exp(s1)+2+exp(-s1));%第一层隐含层误差%权值和阈值修正w3=w3+a*e3*(x2)';%权值修正w2=w2+a*e2*(x1)';w1=w1+a*e1*(X(:,i))';o3=o3-a*e3;%阈值修正o2=o2-a*e2;o1=o1-a*e1;endE(j)=0.5*((yf-x3)*(yf-x3)');%方差time=time+1;%记录学习次数ifE(j)bbreakendend%检验m=0:2*pi/(Nj-1):2*pi;n=0:2*pi/(Nj-1):2*pi;x=m;y=n;ym=eval(fcn);%期望输出M(1,:)=x;M(2,:)=y;m3=zeros(1,Nj);fori=1:1:NjS1=w1*M(:,i)-o1;m1=1./(1+exp(-S1));%第一层隐含层输出S2=w2*m1-o2;m2=1./(1+exp(-S2));%第二层隐含层输出S3=w3*m2-o3;%m3(i)=1./(1+exp(-S3));%输出层输出智能控制8m3(i)=S3;endfigure(1);plot(m,ym,'g-');holdonplot(m,m3,'r.');title('检验曲线');xlabel('x');ylabel('y=cos(x)');figure(2);plot(x0,yf,'b-');holdonplot(x0,x3,'ro');title('学习曲线');xlabel('x');ylabel('y=cos(x)');k=1:time;figure(3);plot(k,E);title('误差曲线');xlabel('训练次数');ylabel('误差值');第三个函数的程序%此BP网络为两层隐含层,每个隐含层10个节点。输入输出各一层%输入层和输出层均采用恒等函数,隐含层采用S形函数clearall;closeall;b=0.05;%精度要求a=0.1;%学习率c=0.05;%动量项学习率Num=11;%训练样本数N=5000;%训练次数Nj=21;%检验样本数o0=rand(2,1);%输入层阈值o1=rand(10,1);%第一层隐含层阈值o2=rand(10,1);%第二层隐含层阈值o3=rand(1,1);%输出层阈值w1=rand(10,2);%输入层与第一层隐含层的权系数w2=rand(10,10);%第一层隐含层与第二层隐含层的权系数w3=rand(1,10);%第二层隐含层与输出层的权系数o1_before=zeros(4,1);%用于存储前一次的阈值o2_before=zeros(4,1);o3_before=zeros(1,1);智能控制9w1_before=zeros(4,2);%用于存储前一次的权值w2_before=zeros(4,4);w3_before=zeros(1,4);o1_next=zeros(4,1);%用于存储后一次的阈值o2_next=zeros(4,1);o3_next=zeros(1,1);w1_next=zeros(4,2);%用于存储后一次的权值w2_next=zeros(4,4);w3_next=zeros(1,4);[x0,y0]=meshgrid(-10:20/(Num-1)-0.001:10);%输入的训练样本yf=(sin(x0).*sin(y0))./(x0.*y0);%被学习的函数x3=zeros(Num,Num);time=0;E=zeros(1,N);forj=1:1:Nfori=1:1:Numforh=1:1:NumX=zeros(2,1);X(1,:)=x0(i,h);X(2,:)=y0(i,h);%前向计算:s1=w1*X-o1;x1=1./(1+exp(-s1));%第一层隐含层输出s2=w2*x1-o2;x2=1./(1+exp(-s2));%第二层隐含层输出s3=w3*x2-o3;%x3=1./(1+exp(-s3));%输出层输出x3(i,h)=s3;%反向计算:%e3=(yf(i)-x3)./(exp(s3)+2+exp(-s3));%输出层误差e3=yf(i)-x3(i);e2=((w3)'*e3)./(exp(s2)+2+exp(-s2));%第二层隐含层误差e1=((w2)'*e2)./(exp(s1)+2+exp(-s1));%第一层隐含层误差w3_next=w3+a*e3*(x2)'+c*(w3-w3_before);%权值修正w2_next=w2+a*e2*(x1)'+c*(w2-w2_before);w1_next=w1+a*e1*X'+c*(w1-w1_before);o3_next=o3-a*e3+c*(o3-o3_before);%阈值修正o2_next=o2-a*e2+c*(o2-o2_before);智能控制10o1_next=o1-a*e1+c*(o1-o1_before);w1_before=w1;w2_before=w2;w3_before=w3;o1_before=o1;o2_before=o2;o3_before=o3;w1=w1_next;w2=w2_next;w3=w3_next;o1=o1_next;o2=o2_next;o3=o3_next;d=yf(i,h);y=x3(i,h);E(j)=E(j)+0.5*((d-y)^2);%方差endendtime=time+1;%记录学习次数ifE(j)bbreakendend%检验[m,n]=meshgrid(-10:(20/(Nj-1)-0.001):10);ym=(sin(m).*sin(n))./(m.*n);m3=zeros(Nj,Nj);fori=1:1:Njforj=1:1:NjM=zeros(2,1);M(1,:)=m(i,j);M(2,:)=n(i,j);S1=w1*M-o1;m1=1./(1+exp(-S1));%第一层隐含层输出S2=w2*m1-o2;m2=1./(1+exp(-S2));%第二层隐含层输出S3=w3*m2-o3;m3(i,j)=S3;%输出层输出endendfigure(1);surf(x0,y0,yf);title('学习期望输出');gridon;figure(2);surf(x0,y0,x3);title('学习实际输出');gridon;figure(3);subplot(221);surf(m,n,ym);title('检验期望输出');gridon;subplot(222);surf(m,n,m3);title('检验实际输出');gridon;k=1:time;subplot(212);title('误差曲线');plot(

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

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

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

×
保存成功