1、state,sum(100*clock);w=rand(1,l);w0=0.5;v=rand(1,l ); v0=rand(1,l);y0=-1;x0=-1;for p=1:Pmax interrupt(p)=normrnd(0,0.1); x(p)=8*(rand()-0.5); d(p)=1.1*(1-x(p)+2*x(p)2)*exp(-x(p)2)/2);endwhile(q=Qmax) for p=1: y(p,:)=logsig(v*x(p)+v0*x0); o1(p)=w*y(p,:)+y0*w0; o(p)=o1(p)+interrupt(p); ek=d(p)-o(p); f
2、or i=1:l ej(i)=w(i)*(d(p)-o(p)*y(p,i)*(1-y(p,i); end wc=n*ek*y(p,:);w0c=n*ek*y0;vc=n*ej*x(p);v0c=n*ej*x0; w=w+wc;w0=w0+w0c;v=v+vc;v0=v0+v0c; E(p)=d(p)-o(p); end s2=0; s2=E(p)2+s2; e=(s2/Pmax)0.5; Erme=Erme e; if e=Emin break; q=q+1;Erme;qx=linspace(-4,4);100plot(Erme);xlabel(误差的收敛曲线)figure;plot(x,d,
3、-rhold on;plot(x,o1,-.bHermit多项式曲线与所构建BP网络输出曲线最好的一次运行结果:学习率=0.01,隐节点数=5q = 25002.批处理程序:samnum=100;testsamnum=101;hiddenunitnum=5;indim=1;outdim=1;,sum(100*clock)noisevar=0.1;noise=noisevar*randn(1,samnum);samin=8*rand(1,samnum)-4;samoutnonoise=1.1*(1-samin+2*samin.2).*exp(-samin.2/2);samout=samoutno
4、noise+noise;testsamin=-4:0.08:4;testsamout=1.1*(1-testsamin+2*testsamin.2).*exp(-testsamin.2/2);figurehold ongridplot(testsamin,testsamout,k-inputxylabel(outputymaxepochs=30000;lr=0.003; alpha=0.5;e0=0.1;w1=0.1*rand(hiddenunitnum,indim);b1=0.1*rand(hiddenunitnum,1);w2=0.1*rand(outdim,hiddenunitnum);
5、b2=0.1*rand(outdim,1);w1ex=w1 b1;w2ex=w2 b2;dw1ex=zeros(hiddenunitnum,2);dw2ex=zeros(1,hiddenunitnum+1);saminex=samin ones(samnum,1);errhistory=;for i=1:maxepochs hiddenout=logsig(w1ex*saminex); hiddenoutex=hiddenout networkout=w2ex*hiddenoutex; error=samout-networkout; sse=(sumsqr(error)/samnum)0.5
6、; errhistory=errhistory sse; if ssee0 delta2=error; delta1=w2*delta2.*hiddenout.*(1-hiddenout); dw2ex=lr*delta2*hiddenoutex dw1ex=lr*delta1*saminex w1ex=w1ex+dw1ex; w2ex=w2ex+dw2ex; w2=w2ex(:,1:hiddenunitnum);iw1=w1ex(:,1)b1=w1ex(:,2)w2b2=w2ex(:,1+hiddenunitnum)sse testhiddenout=logsig(w1*testsamin+
7、repmat(b1,1,testsamnum);testnnout=w2*testhiddenout+repmat(b2,1,testsamnum);plot(testsamin,testnnout);xx,num=size(errhistory);plot(1:num,errhistory);运行结果最好时,学习效率=0.005,隐节点数=5:w1 = 0.5816 2.5220 -3.9213 -1.8311 -1.4301b1 = 0.7763 5.0958 -1.9469 3.9640 0.8285w2 = 0.1420 2.9787 2.9458 2.5186 -2.2577b2 =
8、 -3.2267sse = 0.1000i = 29073.加入动量项的批处理程序:只需将批处理程序中的 dw1ex=lr*delta1*saminex改为 dw2ex=lr*delta2*hiddenoutex+dw2ex*alpha; dw1ex=lr*delta1*saminex+dw1ex*alpha;运行结果最好时,学习效率=0.005,隐节点数=7: 1.2224 0.2118 2.2169 -2.4819 -1.1339 -2.8364 1.6276 0.1389 -0.4904 -4.4112 -5.1026 -0.3769 -1.1383 -1.0608 1.8665 -1.
9、1976 -2.7362 -2.7258 -1.8990 5.1942 1.9903 -0.3951 52270.1000表格 1. 单样本 BP算法平均最小误差 学习效率隐节点数0.00010.0010.0030.0050.010.130.31870.16000.12400.11400.11770.130550.32820.10200.10300.110070.29000.10600.1043100.30000.10750.101表格 2. 批处理 BP算法平均最小误差 0.40230.19560.12000.14360.1489NaN0.43020.1024 0.10.49850.4752
10、0.12010.47140.43570.10730.10100.5642表格 3. 加入动量项的批处理 BP算法平均最小误差 0.28450.12890.11620.11650.14520.18990.10530.29840.10020.22350.10820.1023三.问题回答1. 比较单样本训练和批处理训练的区别;答:单样本输入是每输入一个样本就调整一次权值,并计算误差的大小,而对于批处理来说,是等所有的样本都输入以后再调整权值.当样本较多的时候批处理能获得较快的收敛速度.2. 根据结果分析增加动量项后算法的变化加入动量项后,就等于让权值的收敛方向向着一定的方向进行,由输出的数据可以看出
11、这一点,对于相同的结点数,相同的学习率,加入动量项后,收速度即迭代次数明显的降低.2 改变不同参数的BP网络运行情况及结果,并给予相应的结果分析改变不同参数,对网络运行情况的影响,可以概括为:总误差的值有一定的随机性.对于改变网络的学习率,小的学习率会使收敛更稳定一点,但是速度也会相对地慢一点,大的学习率在一定程度上能加快收敛的速度,但是收敛的概率要小得多,很容易发散,所以说,随着学习的增大,迭代的次数会先减小后增大。大到一定程度进,由于波动太大。结果就不在收敛.3 思考:输出层可以采用Sigmoid函数吗?为什么?答:可以,但需要进行变换。4 试验中遇到的问题和解决方法一开始不理解隐层,没有考虑隐节点个数的变化;后来还不行,因为没加阈值;后来还有很多错,比如矩阵的点乘,初始化最后终于还是被我搞定哈!
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1