BP神经网络实例含源码Word格式文档下载.docx
《BP神经网络实例含源码Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《BP神经网络实例含源码Word格式文档下载.docx(21页珍藏版)》请在冰豆网上搜索。
程序及相关界面(VB)
1主界面
代码:
PrivateSubCommand1_Click()
form2.Visible=False
Form3.Visible=True
EndSub
PrivateSubCommand2_Click()
Form1.Visible=True
PrivateSubCommand3_Click()
Form4.Visible=True
PrivateSubCommand4_Click()
Form5.Visible=True
PrivateSubCommand5_Click()
End
PrivateSubForm_Load()
Command3.Enabled=False
Command4.Enabled=False
2查看网络结构
代码:
Form3.Visible=False
form2.Visible=True
3网络训练
Form1.Visible=False
Label2.Caption="
样本训练中…"
DimiAsInteger,jAsInteger,kAsInteger,pAsInteger,sAsSingle
DimMaxx(1To3)AsSingle,Minx(1To3)AsSingle,Meanx(1To3)AsSingle
Dimx(1To3,1To100)AsSingle,sumx(1To3)AsSingle,TempAsSingle
DimDatex(1To3,1To100)AsSingle,inputx(1To3)AsSingle,outputx(1To100)AsSingle
DimEx(1To100)AsSingle
Dimtime(1To5000)AsInteger,cishu(1To100)AsInteger
DimDv_1(1To5,1To3)AsSingle,Dw_1(1To5)AsSingle
DimRAsSingle
DimMaxdAsSingle,MindAsSingle
Dims1(1To5)AsSingle,y1(1To5,1To100)AsSingle,s2AsSingle,y2(1To100)AsSingle
DimdeltW(1To100)AsSingle,deltV(1To5,1To100)AsSingle
DimDw(1To5)AsSingle,Dv(1To5,1To3)AsSingle
DimMyIn(1To3)AsSingle
DimErrorx(1To5000)AsSingle
Randomize
Fori=1To3
Maxx(i)=0
Minx(i)=0
Meanx(i)=0
Nexti
Temp=0
Maxd=0
Mind=0
Fori=1To5
Forj=1To3
Dv_1(i,j)=0
v(i,j)=2*Rnd-1
Nextj
Dw_1(i)=0
w(i)=2*Rnd-1
Forj=1To3
Fori=1To100
x(j,i)=4*(2*Rnd-1)
Nexti
sumx(j)=0
Nextj
'
求最值
Ifx(j,i)>
=Maxx(j)Then
Maxx(j)=x(j,i)
EndIf
Ifx(j,i)<
=Minx(j)Then
Minx(j)=x(j,i)
Temp=Temp+x(j,i)
sumx(j)=Temp
Temp=0
Meanx(j)=sumx(j)/100
归一化
IfMaxx(j)-x(j,i)>
=x(j,i)-Minx(j)Then
R=Maxx(j)-x(j,i)
Else
R=x(j,i)-Minx(j)
Datex(j,i)=(x(j,i)-Meanx(j))/R
期望输出
Fori=1To100
inputx(j)=Datex(j,i)
outputx(i)=2*(inputx
(1)+Sin(inputx
(2))+Exp(inputx(3)))
输出归一化
IfMaxd<
=outputx(i)Then
Maxd=outputx(i)
IfMind>
Mind=outputx(i)
Ex(i)=(outputx(i)-Mind)/(Maxd-Mind)
训练
Fors=1To5000Step1
time(s)=s
Forp=1To100
cishu(p)=p
Fori=1To3
MyIn(i)=Datex(i,p)
Fori=1To5
Temp=Temp+v(i,j)*MyIn(j)
s1(i)=Temp
y1(i,p)=1/(1+Exp(-s1(i)))
Temp=y1(i,p)*w(i)+Temp
s2=Temp
y2(p)=1/(1+Exp(-s2))
deltW(p)=(Ex(p)-y2(p))*y2(p)*(1-y2(p))
deltV(i,p)=deltW(p)*w(i)*y1(i,p)*(1-y1(i,p))
Nextp
误差
Temp=Temp+(Ex(i)-y2(i))^2
Errorx(s)=Temp
调整权值
Dw_1(i)=Dw(i)
Forj=1To100
Temp=Temp+deltW(j)*y1(i,j)
Dw(i)=Temp
Dv_1(i,j)=Dv(i,j)
Fork=1To100
Temp=Temp+deltV(i,k)*Datex(j,k)
Nextk
Dv(i,j)=Temp
w(i)=0.2*Dw(i)+0.2*Dw_1(i)+w(i)
Forj=1To5
v(j,i)=0.2*Dv(j,i)+0.2*Dv_1(j,i)+v(j,i)
画图
Picture1.Cls
Picture1.ScaleTop=1.5
Picture1.ScaleHeight=-2
Picture1.ScaleLeft=-10
Picture1.ScaleWidth=120
Picture1.Line(-9,0)-(110,0)
Picture1.Line(0,0)-(0,1.5)
Picture1.PSet(cishu(i),Ex(i)),RGB(128,128,0)
Picture1.PSet(cishu(i),y2(i)),RGB(128,0,0)
Fori=1To99
Picture1.Line(cishu(i),Ex(i))-(cishu(i+1),Ex(i+1)),RGB(128,128,0)
Picture1.Line(cishu(i),y2(i))-(cishu(i+1),y2(i+1)),RGB(128,0,0)
延时
Forj=1To1000
Fork=1To50
Picture2.Cls
Picture2.Prints
DoEvents
Nexts
"
form2.Command3.Enabled=True
form2.Command4.Enabled=True
泛化
Dimtest(1To3,1To20)AsSingle,sumE(1To3)AsSingle
DimMaxE(1To3)AsSingle,MinE(1To3)AsSingle,MeanE(1To3)AsSingle
DimMaxxEAsSingle,MinxEAsSingle
Dimdes(1To3)AsSingle,outE(1To20)AsSingle
DimMIn(1To3)AsSingle,s11(1To5)AsSingle,y11(1To5,1To20)AsSingle,s22AsSingle
DimDateE(1To3,1To20)AsSingle
Fori=1To20
test(j,i)=4*(2*Rnd-1)
Fori=1To20
Iftest(j,i)>
=MaxE(j)Then
MaxE(j)=test(j,i)
Iftest(j,i)<
=MinE(j)Then
MinE(j)=test(j,i)
Temp=Temp+test(j,i)
sumE(j)=Temp
MeanE(j)=sumE(j)/100
IfMaxE(j)-test(j,i)>
=test(j,i)-MinE(j)Then
R=MaxE(j)-test(j,i)
R=test(j,i)-MinE(j)
DateE(j,i)=(test(j,i)-MeanE(j))/R
求输出
Forp=1To20
Ti(p)=p
MIn(i)=DateE(i,p)
Temp=Temp+v(i,j)*MIn(j)
s11(i)=Temp
y11(i,p)=1/(1+Exp(-s11(i)))
Temp=y11(i,p)*w(i)+Temp
s22=Temp
y22(p)=1/(1+Exp(-s22))
输出及归一化
Forj=1To20
des(i)=DateE(i,j)
outE(j)=2*(des
(1)+Sin(des
(2))+Exp(des(3)))
IfMaxxE<
=outE(i)Then
MaxxE=outE(i)
IfMinxE>
MinxE=outE(i)
outD(i)=(outE(i)-MinxE)/(MaxxE-MinxE)
4查看训练结果
Form5.Visible=False
Picture1.Cls
Picture2.Cls
DimiAsInteger,jAsInteger
Picture2.Printv(i,j);
Spc(4);
Picture2.Print
Picture1.Printw(i);
5泛化
Form4.Visible=False
Fors=1To20
'
Picture1.ScaleLeft=-5
Picture1.ScaleWidth=30
Picture1.Line(-5,0)-(25,0)
Picture1.Line(0,-0.5)-(0,1.5)
Picture1.PSet(Ti(i),outD(i)),RGB(128,128,0)
Picture1.PSet(Ti(i),y22(i)),RGB(128,0,0)
Fori=1To19
Picture1.Line(Ti(i),outD(i))-(Ti(i+1),outD(i+1)),RGB(128,128,0)
Picture1.Line(Ti(i),y22(i))-(Ti(i+1),y22(i+1)),RGB(128,0,0)
6全局模块
Publicw(1To5)AsSingle,v(1To5,1To3)AsSingle
PublicTi(1To20)AsSingle,y22(1To20)AsSingle,outD(1To20)AsSingle
四:
相关分析及讨论
以上编程实现了对一个三输入、一输出非线性函数的逼近,在模型训练中采用改进的BP网络——动量因子法,输入是随机产生的100组数据,输出是通过已知函数得到的相应期望输出,通过BP网络的5000代训练可以及期望输出拟合的很好,泛化也较理想,训练误差和泛化误差都在可接受范围内。
前已提及,在BP网络训练中,学习速率和动量因子的选择是很重要的,一下分别对两者进行研究:
1关于学习速率
对于前述函数,分别取学习速率为:
0.01,0.2,0.3,0.5,0.9可得训练结果如下:
从对网络的训练及相应的曲线可以看出,学习速率小的话训练稳定,但较慢,由于BP网络采用的是梯度下降法,训练的好坏很大程度上决定于开始的若干步,如果学习速率过小,开始训练过于缓慢,则有可能使整个训练最终无法达到要求。
学习速率越大,训练越快,但稳定性变差,当大于一定数值后甚至最终无法收敛。
基于此,引进动量项,以改进训练性能。
2关于学习速率
一下分别取动量因子为:
0.01,0.1,0.2,0.5,0.8,(学习速率为0.5)结果如下:
有训练过程及相应曲线可已看出,当引进动量项以后即使在较大的学习速率下,训练过程依然较平稳,而且由于在每次修改权值的时候考虑了前一次的修改作用,使得权值的修正更具合理性,但是,如果动量项过大的话亦会使得训练过程震荡,无法寻得最优值。
综上,在BP神经网络的训练中综合考虑学习系数和动量因子,可以使得训练过程即迅速而且平稳,能在较快的时间内找到最佳的权值组合。