收藏 分销(赏)

bp神经网络算法.doc

上传人:a199****6536 文档编号:1279642 上传时间:2024-04-19 格式:DOC 页数:6 大小:159.01KB 下载积分:6 金币
下载 相关
bp神经网络算法.doc_第1页
第1页 / 共6页
bp神经网络算法.doc_第2页
第2页 / 共6页


点击查看更多>>
资源描述
BP神经网络算法 三层BP神经网络如图: 目标输出向量 传递函数 输出层,输出向量 输入层,输入向量 隐含层,隐含层输出向量 权值为 传递函数 设网络的输入模式为,隐含层有h个单元,隐含层的输出为,输出层有m个单元,他们的输出为,目标输出为设隐含层到输出层的传递函数为,输出层的传递函数为g 于是::隐含层第j个神经元的输出;其中 :输出层第k个神经元的输出 此时网络输出与目标输出的误差为,显然,它是的函数。 下面的步骤就是想办法调整权值,使减小。 由高等数学的知识知道:负梯度方向是函数值减小最快的方向 因此,可以设定一个步长,每次沿负梯度方向调整个单位,即每次权值的调整为: ,在神经网络中称为学习速率 可以证明:按这个方法调整,误差会逐渐减小。 BP神经网络(反向传播)的调整顺序为: 1)先调整隐含层到输出层的权值 设为输出层第k个神经元的输入 -------复合函数偏导公式 若取,则 于是隐含层到输出层的权值调整迭代公式为: 2)从输入层到隐含层的权值调整迭代公式为: 其中为隐含层第j个神经元的输入: 注意:隐含层第j个神经元与输出层的各个神经元都有连接,即涉及所有的权值,因此 于是: 因此从输入层到隐含层的权值调整迭代为公式为: 例: 下表给出了某地区公路运力的历史统计数据,请建立相应的预测模型,并对给出的2010和2011年的数据,预测相应的公路客运量和货运量。 时间 人数(单位:万人) 机动车数(单位:万辆) 公路面积(单位:万平方公里) 公路客运量(单位:万人) 公路货运量(单位:万吨) 1990 20.55 0.6 0.09 5126 1237 1991 22.44 0.75 0.11 6217 1379 1992 25.37 0.85 0.11 7730 1385 1993 27.13 0.9 0.14 9145 1399 1994 29.45 1.05 0.2 10460 1663 1995 30.1 1.35 0.23 11387 1714 1996 30.96 1.45 0.23 12353 1834 1997 34.06 1.6 0.32 15750 4322 1998 36.42 1.7 0.32 18304 8132 1999 38.09 1.85 0.34 19836 8936 2000 39.13 2.15 0.36 21024 11099 2001 39.99 2.2 0.36 19490 11203 2002 41.93 2.25 0.38 20433 10524 2003 44.59 2.35 0.49 22598 11115 2004 47.3 2.5 0.56 25107 13320 2005 52.89 2.6 0.59 33442 16762 2006 55.73 2.7 0.59 36836 18673 2007 56.76 2.85 0.67 40548 20724 2008 59.17 2.95 0.69 42927 20803 2009 60.63 3.1 0.79 43462 21804 2010 73.3900 3.9635 0.9880 2011 75.5500 4.0975 1.0268 function main() clc % 清屏 clear all; %清除内存以便加快运算速度 close all; %关闭当前所有figure图像 SamNum=20; %输入样本数量为20 TestSamNum=20; %测试样本数量也是20 ForcastSamNum=2; %预测样本数量为2 HiddenUnitNum=8; %中间层隐节点数量取8,比工具箱程序多了1个 InDim=3; %网络输入维度为3 OutDim=2; %网络输出维度为2 %原始数据 %人数(单位:万人) sqrs=[20.55 22.44 25.37 27.13 29.45 30.10 30.96 34.06 36.42 38.09 39.13 39.99 ... 41.93 44.59 47.30 52.89 55.73 56.76 59.17 60.63]; %机动车数(单位:万辆) sqjdcs=[0.6 0.75 0.85 0.9 1.05 1.35 1.45 1.6 1.7 1.85 2.15 2.2 2.25 2.35 2.5 2.6... 2.7 2.85 2.95 3.1]; %公路面积(单位:万平方公里) sqglmj=[0.09 0.11 0.11 0.14 0.20 0.23 0.23 0.32 0.32 0.34 0.36 0.36 0.38 0.49 ... 0.56 0.59 0.59 0.67 0.69 0.79]; %公路客运量(单位:万人) glkyl=[5126 6217 7730 9145 10460 11387 12353 15750 18304 19836 21024 19490 20433 ... 22598 25107 33442 36836 40548 42927 43462]; %公路货运量(单位:万吨) glhyl=[1237 1379 1385 1399 1663 1714 1834 4322 8132 8936 11099 11203 10524 11115 ... 13320 16762 18673 20724 20803 21804]; p=[sqrs;sqjdcs;sqglmj]; %输入数据矩阵 t=[glkyl;glhyl]; %目标数据矩阵 [SamIn,minp,maxp,tn,mint,maxt]=premnmx(p,t); %原始样本对(输入和输出)初始化 rand('state',sum(100*clock)) %依据系统时钟种子产生随机数 rand是产生0到1的均匀分布,randn是产生均值为0,方差为1的正态分布 rand(n)或randn(n)产生n*n阶矩阵,rand(m,n)或randn(n)产生m*n的随机数矩阵 NoiseVar=0.01; %噪声强度为0.01(添加噪声的目的是为了防止网络过度拟合) Noise=NoiseVar*randn(2,SamNum); %生成噪声 SamOut=tn + Noise; %将噪声添加到输出样本上 TestSamIn=SamIn; %这里取输入样本与测试样本相同因为样本容量偏少 TestSamOut=SamOut; %也取输出样本与测试样本相同 MaxEpochs=50000; %最多训练次数为50000 lr=0.035; %学习速率为0.035 E0=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=[]; %给中间变量预先占据内存 for i=1:MaxEpochs HiddenOut=logsig(W1*SamIn+repmat(B1,1,SamNum)); % 隐含层网络输出 NetworkOut=W2*HiddenOut+repmat(B2,1,SamNum); % 输出层网络输出 Error=SamOut-NetworkOut; % 实际输出与网络输出之差 SSE=sumsqr(Error) %能量函数(误差平方和) ErrHistory=[ErrHistory SSE]; if SSE<E0,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; end HiddenOut=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.39 75.55 3.9635 4.0975 0.9880 1.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)
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服