初学bp神经网络算法

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

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

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

资源描述

BP神经网络算法三层BP神经网络如图:设网络的输入模式为Tnxxxx),...,(21,隐含层有h个单元,隐含层的输出为Thyyyy),...,(21,输出层有m个单元,他们的输出为Tmzzzz),...,(21,目标输出为Tmtttt),...,,(21设隐含层到输出层的传递函数为f,输出层的传递函数为g于是:)()(01niiijniiijjxwfxwfy:隐含层第j个神经元的输出;其中1,00xwj)(0hjjjkkywgz:输出层第k个神经元的输出此时网络输出与目标输出的误差为mkkkzt12)(21,显然,它是jkijww和的函数。下面的步骤就是想办法调整权值,使减小。由高等数学的知识知道:负梯度方向是函数值减小最快的方向因此,可以设定一个步长,每次沿负梯度方向调整个单位,即每次权值的调整为:1x3x2xnxjy隐含层,隐含层输出向量权值为ijw权值为jkw传递函数fkzkt输出层,输出向量输入层,输入向量目标输出向量传递函数gpqpqww,在神经网络中称为学习速率可以证明:按这个方法调整,误差会逐渐减小。BP神经网络(反向传播)的调整顺序为:1)先调整隐含层到输出层的权值设kv为输出层第k个神经元的输入hjjjkkywv0jkkkjkkkkkmkkkjkmkkkjkyvgztwvvzzztwztw)(')()(21)(211212-------复合函数偏导公式若取xexfxg11)()(,则)1()111(11)1()('2kkvvvvkzzeeeeugkkkk于是隐含层到输出层的权值调整迭代公式为:jkkjkjkyzztwtw)1()()1(2)从输入层到隐含层的权值调整迭代公式为:其中ju为隐含层第j个神经元的输入:niiijjxwu0注意:隐含层第j个神经元与输出层的各个神经元都有连接,即jy涉及所有的权值ijw,因此mkjkkkkjkkkmkkkkjwufztyuuzzzty002)(')()(于是:因此从输入层到隐含层的权值调整迭代为公式为:ijijijxtwtw)()1(ijjjjjmkkkijmkkkijwuuyyztwztw1212)(21)(21ijijmkjkkkkijmkkkijxxufwufztwztw)('})('){()(21012例:下表给出了某地区公路运力的历史统计数据,请建立相应的预测模型,并对给出的2010和2011年的数据,预测相应的公路客运量和货运量。时间人数(单位:万人)机动车数(单位:万辆)公路面积(单位:万平方公里)公路客运量(单位:万人)公路货运量(单位:万吨)199020.550.60.0951261237199122.440.750.1162171379199225.370.850.1177301385199327.130.90.1491451399199429.451.050.2104601663199530.11.350.23113871714199630.961.450.23123531834199734.061.60.32157504322199836.421.70.32183048132199938.091.850.34198368936200039.132.150.362102411099200139.992.20.361949011203200241.932.250.382043310524200344.592.350.492259811115200447.32.50.562510713320200552.892.60.593344216762200655.732.70.593683618673200756.762.850.674054820724200859.172.950.694292720803200960.633.10.794346221804201073.39003.96350.98805435927827201175.55004.09751.02685560628453functionmain()clc%清屏clearall;%清除内存以便加快运算速度closeall;%关闭当前所有figure图像SamNum=20;%输入样本数量为20TestSamNum=20;%测试样本数量也是20ForcastSamNum=2;%预测样本数量为2HiddenUnitNum=8;%中间层隐节点数量取8,比工具箱程序多了1个InDim=3;%网络输入维度为3OutDim=2;%网络输出维度为2%原始数据%人数(单位:万人)sqrs=[20.5522.4425.3727.1329.4530.1030.9634.0636.4238.0939.1339.99...41.9344.5947.3052.8955.7356.7659.1760.63];%机动车数(单位:万辆)sqjdcs=[0.60.750.850.91.051.351.451.61.71.852.152.22.252.352.52.6...2.72.852.953.1];%公路面积(单位:万平方公里)sqglmj=[0.090.110.110.140.200.230.230.320.320.340.360.360.380.49...0.560.590.590.670.690.79];%公路客运量(单位:万人)glkyl=[5126621777309145104601138712353157501830419836210241949020433...22598251073344236836405484292743462];%公路货运量(单位:万吨)glhyl=[123713791385139916631714183443228132893611099112031052411115...133201676218673207242080321804];p=[sqrs;sqjdcs;sqglmj];%输入数据矩阵t=[glkyl;glhyl];%目标数据矩阵[SamIn,minp,maxp,tn,mint,maxt]=premnmx(p,t);%原始样本对(输入和输出)初始化rand('state',sum(100*clock))%依据系统时钟种子产生随机数NoiseVar=0.01;%噪声强度为0.01(添加噪声的目的是为了防止网络过度拟合)Noise=NoiseVar*randn(2,SamNum);%生成噪声SamOut=tn+Noise;%将噪声添加到输出样本上TestSamIn=SamIn;%这里取输入样本与测试样本相同因为样本容量偏少TestSamOut=SamOut;%也取输出样本与测试样本相同MaxEpochs=50000;%最多训练次数为50000lr=0.035;%学习速率为0.035E0=0.65*10^(-3);%目标误差为0.65*10^(-3)W1=0.5*rand(HiddenUnitNum,InDim)-0.1;%初始化输入层与隐含层之间的权值B1=0.5*rand(HiddenUnitNum,1)-0.1;%初始化输入层与隐含层之间的阈值W2=0.5*rand(OutDim,HiddenUnitNum)-0.1;%初始化输出层与隐含层之间的权值B2=0.5*rand(OutDim,1)-0.1;%初始化输出层与隐含层之间的阈值ErrHistory=[];%给中间变量预先占据内存fori=1:MaxEpochsHiddenOut=logsig(W1*SamIn+repmat(B1,1,SamNum));%隐含层网络输出NetworkOut=W2*HiddenOut+repmat(B2,1,SamNum);%输出层网络输出Error=SamOut-NetworkOut;%实际输出与网络输出之差SSE=sumsqr(Error)%能量函数(误差平方和)ErrHistory=[ErrHistorySSE];ifSSEE0,break,end%如果达到误差要求则跳出学习循环%以下六行是BP网络最核心的程序%他们是权值(阈值)依据能量函数负梯度下降原理所作的每一步动态调整量Delta2=Error;Delta1=W2'*Delta2.*HiddenOut.*(1-HiddenOut);dW2=Delta2*HiddenOut';dB2=Delta2*ones(SamNum,1);dW1=Delta1*SamIn';dB1=Delta1*ones(SamNum,1);%对输出层与隐含层之间的权值和阈值进行修正W2=W2+lr*dW2;B2=B2+lr*dB2;%对输入层与隐含层之间的权值和阈值进行修正W1=W1+lr*dW1;B1=B1+lr*dB1;endHiddenOut=logsig(W1*SamIn+repmat(B1,1,TestSamNum));%隐含层输出最终结果NetworkOut=W2*HiddenOut+repmat(B2,1,TestSamNum);%输出层输出最终结果a=postmnmx(NetworkOut,mint,maxt);%还原网络输出层的结果x=1990:2009;%时间轴刻度newk=a(1,:);%网络输出客运量newh=a(2,:);%网络输出货运量figure;subplot(2,1,1);plot(x,newk,'r-o',x,glkyl,'b--+')%绘值公路客运量对比图;legend('网络输出客运量','实际客运量');xlabel('年份');ylabel('客运量/万人');subplot(2,1,2);plot(x,newh,'r-o',x,glhyl,'b--+')%绘制公路货运量对比图;legend('网络输出货运量','实际货运量');xlabel('年份');ylabel('货运量/万吨');%利用训练好的网络进行预测%当用训练好的网络对新数据pnew进行预测时,也应作相应的处理pnew=[73.3975.553.96354.09750.98801.0268];%2010年和2011年的相关数据;pnewn=tramnmx(pnew,minp,maxp);%利用原始输入数据的归一化参数对新数据进行归一化;HiddenOut=logsig(W1*pnewn+repmat(B1,1,ForcastSamNum));%隐含层输出预测结果anewn=W2*HiddenOut+repmat(B2,1,ForcastSamNum);%输出层输出预测结果%把网络预测得到的数据还原为原始的数量级;anew=postmnmx(anewn,mint,maxt)

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

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

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

×
保存成功