1、基于BP神经网络的公路运量预测 机械工程机械工程 目录目录CONTENTSBPBP神经网络原理神经网络原理BPBP神经网络运用实例神经网络运用实例总结总结一、一、BPBP神经网络原理神经网络原理BP算法是利用输出层的误差来估计输出层的直接前导层的误差,再用这个误差估计更前一层的误差。如此下去,就获得了所有其他各层的误差估计。这样就形成了将输出端表现出的误差沿着与输入信号传送相反的方向逐级向网络的输入端传递的过程。因此,人们就又将此算法称为向后传播算法,简称BP算法。如下图所示:输入样本输入层各隐层输出层判断是否转入反向传播阶段:若输出层的实际输出与期望的输出不符误差反传误差以某种形式在各层表示
2、修正各层单元的权值网络输出的误差减少到可接受的程度进行到预先设定的学习次数为止BPNN的学习过程的学习过程BPNN的标准学习算法的标准学习算法输入层与中间层的连接权值:隐含层与输出层的连接权值:隐含层各神经元的阈值:输出层各神经元的阈值:样本数据个数:激活函数:误差函数:第一步,网络初始化 给各连接权值分别赋一个区间(-1,1)内的随机数,设定误差函数e,给定计算精度值 和最大学习次数M。第二步第二步,随机选取第随机选取第 个输入样本及对应期望输个输入样本及对应期望输出出 BPNN的标准学习算法的标准学习算法第三步,计算隐含层各神经元的输入和输出第三步,计算隐含层各神经元的输入和输出BPNN的
3、标准学习算法的标准学习算法第四步,利用网络期望输出和实际输出,计算误差函数对输出层的各神经元的偏导数 。BPNN的标准学习算法的标准学习算法第五步,利用隐含层到输出层的连接权值、输出层的 和隐含层的输出计算误差函数对隐含层各神经元的偏导数 。BPNN的标准学习算法的标准学习算法BPNN的标准学习算法的标准学习算法第六步,利用输出层各神经元的 和隐含层各神经元的输出来修正连接权值 。BPNN的标准学习算法的标准学习算法第七步,利用隐含层各神经元的 和输入层各神经元的输入修正连接权。BPNN的标准学习算法的标准学习算法第八步,计算全局误差第八步,计算全局误差第九步,判断网络误差是否满足要求第九步,
4、判断网络误差是否满足要求。当误差达到预设精度或学习次数大于设定的最大次数,则结束算法。否则,选取下一个学习样本及对应的期望输出,返回到第三步,进入下一轮学习。BPNN的标准学习算法的标准学习算法lBPNNBPNN的生成:函数的生成:函数newffnewffnet=newff(PR,S1 S2.SN,TF1 TF2.TFN,BTF,BLF,PF)PR:一个R2矩阵,由R维输入向量的每维最小值和最大值组成Si:第i层的神经元个数TFi:第i层的传递函数,默认为tansigBTF:训练函数,默认为trainlmBLF:学习函数,默认为learngdmPF:性能函数,默认为msenet=newff(0
5、,10;1,2,5,1,tansig,purelin,trainlm);%生成一个两层BP网络,隐层和输出层神经的个数为5和1,传递函数分别为tansig和purelin,训练函数为trainlm,其他默认net=newff(P,T,N,TF1 TF2.TFN,BTF,BLF,PF)BPNN的的MATLAB实现实现lBPNNBPNN的初始化:函数的初始化:函数initinit newff 函数在建立网络对象的同时,自动调用初始化函数,根据缺省的参数设置网络的连接权值和阈值.使用函数init可以对网络进行自定义的初始化.通过选择初始化函数,可对各层连接权值和阈值分别进行不同的初始化.BPNN的的
6、MATLAB实现实现lBPNNBPNN的训练:函数的训练:函数traintrain 利用已知的利用已知的”输入输入目标目标”样本向量数据对网络进行训样本向量数据对网络进行训练练,采用采用train train 函数来完成函数来完成.训练之前训练之前,对训练参数进行设置对训练参数进行设置 训练参数训练参数 参数含义参数含义 默认值默认值net.trainParam.epochsnet.trainParam.epochs训练步数训练步数100100net.trainParam.shownet.trainParam.show显示训练结果的间隔步数显示训练结果的间隔步数2525net.trainPar
7、am.goalnet.trainParam.goal训练目标误差训练目标误差0 0net.trainParam.timenet.trainParam.time训练允许时间训练允许时间INfINfnet.trainParam.lrnet.trainParam.lr学习率学习率0.010.01net=train(net,P,net=train(net,P,T)T)BPNN的的MATLAB实现实现lBPNNBPNN的训练:学习算法的选择的训练:学习算法的选择学习算法学习算法适用问题类型适用问题类型收敛性能收敛性能占用存占用存储空间储空间其他特点其他特点trainlmtrainlm函数拟合函数拟合收敛
8、快收敛快,误差小误差小大大性能随网络规模增大而变性能随网络规模增大而变差差trainrptrainrp模式分类模式分类收敛最快收敛最快较小较小性能随网络训练误差减小性能随网络训练误差减小而变差而变差trainscgtrainscg函数拟合函数拟合模式分类模式分类收敛较快收敛较快性能稳定性能稳定中等中等尤其适用于网络规模较大尤其适用于网络规模较大的情况的情况trainbfgtrainbfg函数拟合函数拟合收敛较快收敛较快较大较大计算量岁网络规模的增大计算量岁网络规模的增大呈几何增长呈几何增长traingdxtraingdx模式分类模式分类收敛较慢收敛较慢较小较小适用于提前停止的方法适用于提前停止
9、的方法 MATLAB MATLAB神经网络工具箱对常规神经网络工具箱对常规BPBP算法进行改进算法进行改进,提供了一系列快速提供了一系列快速算法算法,以满足不同问题的需要以满足不同问题的需要BPNN的的MATLAB实现实现lBPNNBPNN的仿真或测试:函数的仿真或测试:函数simsim或或netnetA=sim(net,p)%网络仿真A=net(p)%网络仿真BPNN的的MATLAB实现实现一般步骤:一般步骤:数据归一化数据归一化mapminmax;创建创建BP网络网络newff初始化初始化init训练算法训练算法trainlm(速度快,需存储空间大)(速度快,需存储空间大)学习规则学习规则
10、learngdm网络训练网络训练train仿真仿真 net,sim;BPNN的的MATLAB实现实现例例1公路运量预测问题公路运量预测问题:公路运量主要包括公路的客运量和公路货公路运量主要包括公路的客运量和公路货运量两个方面。据研究,某地区的公路运量主要与该地区的人数、运量两个方面。据研究,某地区的公路运量主要与该地区的人数、机动车数量和公路面积有关,表机动车数量和公路面积有关,表1给出了给出了20年的公路运量相关数据,年的公路运量相关数据,表中单位分别为万人表中单位分别为万人/万量万量/万平方千米万平方千米/万吨万吨/万人。万人。根据有关部门数据,该地区根据有关部门数据,该地区2010年和年
11、和2011年的人数分别为年的人数分别为73.39和和75.55万人,机动车数量分别为万人,机动车数量分别为3.9635和和4.0975万辆,公路面积万辆,公路面积将分别为将分别为0.9880和和1.0268万平方米。万平方米。请利用请利用BP神经网络预测该地区神经网络预测该地区2010年年2011年得公路客运量和公年得公路客运量和公路货运量。路货运量。二、二、BPBP神经网络实例神经网络实例 某地区20年公路运量数据 年份 人口数量 机动车数量 公路面积 公路客运量 公路货运量 (万人)(万量)(万平方千米)(万吨)(万人)1990 20.55 0.6 0.09 5126 12371991 2
12、2.44 0.75 0.11 6217 13791992 25.37 0.85 0.11 7730 13851993 27.13 0.90 0.14 9145 13991994 29.45 1.05 0.20 10460 16631995 30.1 1.35 0.23 11387 17141996 30.96 1.45 0.23 12353 1834 1997 34.06 1.60 0.32 15750 43221998 36.42 1.70 0.32 18304 81321999 38.09 1.85 0.34 19836 89362000 39.13 2.15 0.36 21024 110
13、99年份 人口数量 机动车数量 公路面积 公路客运量 公路货运量2001 39.99 2.20 0.36 19490 112032002 41.93 2.25 0.38 20433 105242003 44.59 2.35 0.49 22598 111152004 47.30 2.50 0.56 25107 133202005 52.89 2.60 0.59 33442 167622006 55.73 2.70 0.59 36836 186732007 56.76 2.85 0.67 40548 207242008 59.17 2.95 0.69 42927 208032009 60.63 3
14、.10 0.79 43462 2180420102010 73.39 73.39 3.9635 0.9880?3.9635 0.9880?2011 75.55 4.0975 1.0268?2011 75.55 4.0975 1.0268?BP网络求解步骤:网络求解步骤:1)原始数据的输入;)原始数据的输入;2)数据)数据归一化;归一化;3)网络建立以及训练;)网络建立以及训练;4)对原始数据进行仿真;)对原始数据进行仿真;5)将原始数据仿真的结果与已知样本进行对比;)将原始数据仿真的结果与已知样本进行对比;6)对新数据进行仿真。)对新数据进行仿真。1)原始数据的输入;)原始数据的输入;sqrt
15、s=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.91 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
16、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;%公
17、路货运量p=sqrts;sqjdcs;sqglmj;%输入数据矩阵t=dlhyl;glhyl;%目标数据矩阵2)2)归一化:利用函数归一化:利用函数premnmx对数据进行归一化处理对数据进行归一化处理pn,minp,maxp,tn,mint,maxt=premnmx(p,t);dx=-1,1;-1,1;-1,1;3 3)训练:利用训练:利用处理好的数据对网络处理好的数据对网络进行训练,进行训练,具体程序具体程序%BP网络训练net=newff(dx,3,2,tansig,tansig,purelin,traingdx);net.trainParam.show=2000;%显示训练结果的间隔步
18、数net.trainParam.Lr=0.05;%学习率net.trainParam.epochs=20000;%训练步数net.trainParam.goal=0.65*10(-3);%训练目标误差net=train(net,pn,tn);an=sim(net,pn);a=postmnmx(an,mint,maxt);pnew=73.39 75.55 3.9635 4.0975 0.9880 1.0268;pnewn=tramnmx(pnew,minp,maxp);anewn=sim(net,pnewn);anew=postmnmx(anewn,mint,maxt);4)4)用原始数据仿真的
19、结果与已知数据进行对比用原始数据仿真的结果与已知数据进行对比x=1990:2009;newk=a(1,:);newh=a(2,:);figure(2);subplot(2,1,1);plot(x,newk,r-o,x,glkyl,b-+);legend(网络输出客运量,实际客运量);xlabel(年份);ylabel(客运量/万人);title(运用工具箱客运量学习和测试对比图);hold onplot(2010,2011,anew(1,:),r-o);subplot(2,1,2);plot(x,newh,r-o,x,glhyl,b-+);legend(网络输出货运量,实际货运量);xlabe
20、l(年份);ylabel(货运量/万人);title(运用工具箱货运量学习和测试对比图);hold onplot(2010,2011,anew(2,:),r-o);也就是说,2010年的公路客运量分别为44451万人和22058万人,2011年的公路货运量分别为44496万吨和22059万吨。总结总结BPBP神经网络建立了输入与输出之间的关系;神经网络建立了输入与输出之间的关系;通过训练修改权重,使得网络输出与实际输出相符;通过训练修改权重,使得网络输出与实际输出相符;人工神经网络的预测准确率受样本数量影响较大,人工神经网络的预测准确率受样本数量影响较大,且易出现过度拟合问题;且易出现过度拟合
21、问题;解决实际问题时,需要分析和提炼影响输出的重要解决实际问题时,需要分析和提炼影响输出的重要因素,获得其数据和输出数据,建立模型;因素,获得其数据和输出数据,建立模型;三、总结三、总结THANKS!a=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;%人数(单位:万人)b=0.6 0.75 0.85 0.91 1.05 1.35 1.45 1.6 1.7 1.85 2.15 2.2 2.25 2.35
22、2.5 2.6 2.7 2.85 2.95 3.1;%机动车数(单位:万辆)c=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;%公路面积d=5126 6217 7730 9145 10460 11387 12353 15750 18304 19836 21024 19490 20433 22598 25107 33442 36836 40548 42927 43462;%公路客运量e=1237 1379 1385 1399 1663 1714
23、 1834 4322 8132 8936 11099 11203 10524 11115 13320 16762 18673 20724 20803 21804;%公路货运量p=a;b;c;%输入数据矩阵t=d;e;%目标数据矩阵pn,minp,maxp,tn,mint,maxt=premnmx(p,t);dx=-1,1;-1,1;-1,1;net=newff(dx,3,7,2,tansig,tansig,purelin,traingdx);net.trainParam.show=1000;net.trainParam.Lr=0.05;net.trainParam.epochs=20000;n
24、et.trainParam.goal=0.65*10(-3);net=train(net,pn,tn);an=sim(net,pn);a=postmnmx(an,mint,maxt);x=1990:2009;newk=a(1,:);newh=a(2,:);figure(2);subplot(2,1,1);plot(x,newk,r-o,x,d,b-+);legend(网络输出客运量,实际客运量);xlabel(年份);ylabel(客运量/万人);title(运用工具箱客运量学习和测试对比图);subplot(2,1,2);plot(x,newh,r-o,x,e,b-+);legend(网络输
25、出货运量,实际货运量);xlabel(年份);ylabel(货运量/万人);title(运用工具箱货运量学习和测试对比图);pnew=73.39 75.55 3.9635 4.0975 0.9880 1.0268;pnewn=tramnmx(pnew,minp,maxp);anewn=sim(net,pnewn);anew=postmnmx(anewn,mint,maxt);sqrts=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.
26、76 59.17 60.63;%人数(单位:万人)sqjdcs=0.6 0.75 0.85 0.91 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 18
27、304 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=sqrts;sqjdcs;sqglmj;%输入数据矩阵t=glkyl;glhyl;%目标数据矩阵pn,minp,maxp,tn,mint,maxt=premnmx(p,t);dx=-1,1;-1,1;
28、-1,1;net=newff(dx,3,2,tansig,tansig,purelin,traingdx);net.trainParam.show=2000;net.trainParam.Lr=0.05;net.trainParam.epochs=20000;net.trainParam.goal=0.65*10(-3);net=train(net,pn,tn);an=sim(net,pn);a=postmnmx(an,mint,maxt);pnew=73.39 75.55 3.9635 4.0975 0.9880 1.0268;pnewn=tramnmx(pnew,minp,maxp);an
29、ewn=sim(net,pnewn);anew=postmnmx(anewn,mint,maxt);x=1990:2009;newk=a(1,:);newh=a(2,:);figure(2);subplot(2,1,1);plot(x,newk,r-o,x,glkyl,b-+);legend(网络输出客运量,实际客运量);xlabel(年份);ylabel(客运量/万人);title(运用工具箱客运量学习和测试对比图);hold onplot(2010,2011,anew(1,:),r-o);subplot(2,1,2);plot(x,newh,r-o,x,glhyl,b-+);legend(网络输出货运量,实际货运量);xlabel(年份);ylabel(货运量/万人);title(运用工具箱货运量学习和测试对比图);hold onplot(2010,2011,anew(2,:),r-o);