BP神经网络实例含源码.docx

上传人:b****6 文档编号:3612245 上传时间:2022-11-24 格式:DOCX 页数:18 大小:209.42KB
下载 相关 举报
BP神经网络实例含源码.docx_第1页
第1页 / 共18页
BP神经网络实例含源码.docx_第2页
第2页 / 共18页
BP神经网络实例含源码.docx_第3页
第3页 / 共18页
BP神经网络实例含源码.docx_第4页
第4页 / 共18页
BP神经网络实例含源码.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

BP神经网络实例含源码.docx

《BP神经网络实例含源码.docx》由会员分享,可在线阅读,更多相关《BP神经网络实例含源码.docx(18页珍藏版)》请在冰豆网上搜索。

BP神经网络实例含源码.docx

BP神经网络实例含源码

BP神经网络实例含源码

BP神经网络算法实现

一:

关于BP网络

BP(BackPropagation)神经网络,即误差反传误差反向传播算法的学习过程,由信息的正向传播和误差的反向传播两个过程组成。

输入层各神经元负责接收来自外界的输入信息,并传递给中间层各神经元;中间层是内部信息处理层,负责信息变换,根据信息变化能力的需求,中间层可以设计为单隐层或者多隐层结构;最后一个隐层传递到输出层各神经元的信息,经进一步处理后,完成一次学习的正向传播处理过程,由输出层向外界输出信息处理结果。

当实际输出与期望输出不符时,进入误差的反向传播阶段。

误差通过输出层,按误差梯度下降的方式修正各层权值,向隐层、输入层逐层反传。

周而复始的信息正向传播和误差反向传播过程,是各层权值不断调整的过程,也是神经网络学习训练的过程,此过程一直进行到网络输出的误差减少到可以接受的程度,或者预先设定的学习次数为止。

BP网络主要应用于以下方面:

函数逼近、模式识别和分类、数据压缩。

BP神经

网络有较强的泛化性能,使网络平滑的逼近函数,能合理的响应被训练以外的输入。

同时,BP网络又有自己的限制与不足,主要表现在:

需要较长的训练时间、网络训练的结果可能使得权值逼近局部最优、训练数据范围外的数据泛化能力较差。

为了避免训练陷入局部最优解,本程序采用改进的BP网络训练,既加入动量

因子,使得网络在最优解附近有一定的震荡,跳出局部最优的范围。

BP网络训练中学习速率与动量因子的选择很重要,在后面的内容中将进行详细

的讨论

:

训练的函数

程序中训练的函数为一个三输入一输出的非线性函数,如下所示

x3xR,yxxe,,,,2sin(),,,12

网络结构为:

3—5—1

三:

程序及相关界面(VB)

1主界面

1

代码:

PrivateSubCommand1_Click()form2.Visible=False

Form3.Visible=True

EndSub

PrivateSubCommand2_Click()form2.Visible=False

Form1.Visible=True

EndSub

PrivateSubCommand3_Click()form2.Visible=False

Form4.Visible=True

EndSub

PrivateSubCommand4_Click()form2.Visible=False

Form5.Visible=True

EndSub

PrivateSubCommand5_Click()End

EndSub

PrivateSubForm_Load()Command3.Enabled=FalseCommand4.Enabled=FalseEndSub

2查看网络结构

2

代码:

PrivateSubCommand1_Click()

Form3.Visible=Falseform2.Visible=TrueEndSub

3网络训练

代码:

3

PrivateSubCommand1_Click()

Form1.Visible=False

form2.Visible=True

EndSub

PrivateSubCommand2_Click()

Label2.Caption="样本训练中…"

DimiAsInteger,jAsInteger,kAsInteger,pAsInteger,sAs

Single

DimMaxx(1To3)AsSingle,Minx(1To3)AsSingle,Meanx(1To3)As

Single

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

Nexti

Forj=1To3

Fori=1To100

x(j,i)=4*(2*Rnd-1)

Nexti

sumx(j)=0

Nextj'求最值

Forj=1To3

Fori=1To100

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)EndIf

Nextisumx(j)=Temp

4

Temp=0

Meanx(j)=sumx(j)/100Nextj'归一化

Forj=1To3

Fori=1To100

IfMaxx(j)-x(j,i)>=x(j,i)-Minx(j)ThenR=Maxx(j)-x(j,i)

Else

R=x(j,i)-Minx(j)

EndIf

Datex(j,i)=(x(j,i)-Meanx(j))/R

Nexti

Nextj

'期望输出

Fori=1To100

Forj=1To3inputx(j)=Datex(j,i)

Nextj

outputx(i)=2*(inputx

(1)+Sin(inputx

(2))+Exp(inputx(3)))Nexti

'输出归一化

Fori=1To100

IfMaxd<=outputx(i)Then

Maxd=outputx(i)

EndIf

IfMind>=outputx(i)Then

Mind=outputx(i)

EndIf

Nexti

Fori=1To100

Ex(i)=(outputx(i)-Mind)/(Maxd-Mind)

Nexti

训练

Fors=1To5000Step1time(s)=s

Forp=1To100

cishu(p)=p

Fori=1To3

MyIn(i)=Datex(i,p)

Nexti

Fori=1To5

Forj=1To3

Temp=Temp+v(i,j)*MyIn(j)

Nextj

s1(i)=Temp

Temp=0

Nexti

Fori=1To5

y1(i,p)=1/(1+Exp(-s1(i)))

Nexti

Fori=1To3

Temp=y1(i,p)*w(i)+Temp

Nexti

s2=Temp

Temp=0

y2(p)=1/(1+Exp(-s2))

deltW(p)=(Ex(p)-y2(p))*y2(p)*(1-y2(p))

Fori=1To5

deltV(i,p)=deltW(p)*w(i)*y1(i,p)*(1-y1(i,p))Nexti

Nextp'误差

Fori=1To100

Temp=Temp+(Ex(i)-y2(i))A2

Nexti

Errorx(s)=Temp

Temp=0

'调整权值

Fori=1To5

Dw_1(i)=Dw(i)

Nexti

Fori=1To5

Forj=1To100

Temp=Temp+deltW(j)*y1(i,j)

Nextj

Dw(i)=Temp

Temp=0

Nexti

Fori=1To5

Forj=1To3

Dv_1(i,j)=Dv(i,j)

Nextj

Nexti

Fori=1To5

Forj=1To3

Fork=1To100

Temp=Temp+deltV(i,k)*Datex(j,k)

Nextk

Dv(i,j)=Temp

Temp=0

Nextj

Nexti

Fori=1To5

w(i)=0.2*Dw(i)+0.2*Dw_1(i)+w(i)

Nexti

Fori=1To3

Forj=1To5

v(j,i)=0.2*Dv(j,i)+0.2*Dv_1(j,i)+v(j,i)

Nextj

Nexti

'画图

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)

Fori=1To100

Picture1.PSet(cishu(i),Ex(i)),RGB(128,128,0)

Picture1.PSet(cishu(i),y2(i)),RGB(128,0,0)

Nexti

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)

6

Nexti

'延时

Forj=1To1000

Fork=1To50

Nextk

Nextj

Picture2.Cls

Picture2.Prints

DoEvents

Nexts

泛化

Label2.Caption=""

form2.Command3.Enabled=Trueform2.Command4.Enabled=True'

Dimtest(1To3,1To20)AsSingle,sumE(1To3)AsSingle

DimMaxE(1To3)AsSingle,MinE(1To3)AsSingle,MeanE(1To3)AsSingle

DimMaxxEAsSingle,MinxEAsSingleDimdes(1To3)AsSingle,outE(1To20)AsSingle

DimMIn(1To3)AsSingle,s11(1To5)AsSingle,y11(1To5,1To

20)AsSingle,s22AsSingle

DimDateE(1To3,1To20)AsSingle

Fori=1To20

Forj=1To3

test(j,i)=4*(2*Rnd-1)

Nextj

Nexti

Forj=1To3

Fori=1To20

Iftest(j,i)>=MaxE(j)Then

MaxE(j)=test(j,i)

EndIf

Iftest(j,i)<=MinE(j)Then

MinE(j)=test(j,i)

Temp=Temp+test(j,i)

EndIf

Nexti

sumE(j)=Temp

Temp=0

MeanE(j)=sumE(j)/100

Nextj

'归一化

Forj=1To3

Fori=1To20

IfMaxE(j)-test(j,i)>=test(j,i)-MinE(j)Then

R=MaxE(j)-test(j,i)

Else

R=test(j,i)-MinE(j)

EndIf

DateE(j,i)=(test(j,i)-MeanE(j))/R

Nexti

Nextj

'求输出

Forp=1To20

Ti(p)=p

Fori=1To3

MIn(i)=DateE(i,p)

Nexti

Fori=1To5

Forj=1To3

Temp=Temp+v(i,j)*MIn(j)Nextj

s11(i)=Temp

Temp=0Nexti

Fori=1To5

y11(i,p)=1/(1+Exp(-s11(i)))Nexti

Fori=1To3

Temp=y11(i,p)*w(i)+TempNexti

s22=Temp

Temp=0y22(p)=1/(1+Exp(-s22))

Nextp

'输出及归一化

Forj=1To20Fori=1To3des(i)=DateE(i,j)

Nexti

outE(j)=2*(des

(1)+Sin(des

(2))+Exp(des(3)))

Nextj

'输出归一化

Fori=1To20

IfMaxxE<=outE(i)Then

MaxxE=outE(i)

EndIf

IfMinxE>=outE(i)Then

MinxE=outE(i)

EndIf

Nexti

Fori=1To20

outD(i)=(outE(i)-MinxE)/(MaxxE-MinxE)

Nexti

EndSub

4查看训练结果

代码:

PrivateSubCommand1_Click()Form5.Visible=False

form2.Visible=True

EndSub

PrivateSubCommand2_Click()Picturel.CIs

Picture2.Cls

DimiAsInteger,jAsIntegerFori=1To5

Forj=1To3

Picture2.Printv(i,j);Spc⑷;

Nextj

Picture2.Print

Picture2.Print

Picture1.Printw(i);Nexti

EndSub

5泛化

代码:

PrivateSubCommand1_Click()Form4.Visible=Falseform2.Visible=True

EndSub

PrivateSubCommand2_Click()Fors=1To20

卩icture1.Cls

Picture1.ScaleTop=1.5

Picture1.ScaleHeight=-2

Picture1.ScaleLeft=-5

Picture1.ScaleWidth=30

Picture1.Line(-5,0)-(25,0)

Picture1.Line(0,-0.5)-(0,1.5)

Fori=1To20

Picture1.PSet(Ti(i),outD(i)),RGB(128,128,0)

Picture1.PSet(Ti(i),y22(i)),RGB(128,0,0)

9

Nexti

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)Nexti

Nexts

EndSub

6全局模块

Publicw(1To5)AsSingle,v(1To5,1To3)AsSinglePublicTi(1

To20)AsSingle,y22(1To20)AsSingle,outD(1To20)AsSingle四:

相关分析及讨论以上编程实现了对一个三输入、一输出非线性函数的逼近,在模型训练中采用

进的BP网络一一动量因子法,输入是随机产生的100组数据,输出是通过已

知函数

得到的相应期望输出,通过BP网络的5000代训练可以与期望输出拟合的很好,泛化

也较理想,训练误差和泛化误差都在可接受范围内。

前已提及,在BP网络训练中,学习速率和动量因子的选择是很重要的,一下

别对两者进行研究:

1关于学习速率

对于前述函数,分别取学习速率为:

0.01,0.2,0.3,0.5,0.9可得训练结果

如下:

11

从对网络的训练及相应的曲线可以看出,学习速率小的话训练稳定,但较慢,由于BP网络采用的是梯度下降法,训练的好坏很大程度上决定于开始的若干步,如果学习速率过小,开始训练过于缓慢,则有可能使整个训练最终无法达到要求。

学习速率越大,训练越快,但稳定性变差,当大于一定数值后甚至最终无法收敛。

基于此,弓I进动量项,以改进训练性能。

2关于学习速率

一下分别取动量因子为:

0.01,0.1,0.2,0.5,0.8,(学习速率为0.5)结果如

下:

有训练过程及相应曲线可已看出,当引进动量项以后即使在较大的学习速率下,训练过程依然较平稳,而且由于在每次修改权值的时候考虑了前一次的修改作用,使得权值的修正更具合理性,但是,如果动量项过大的话亦会使得训练过程震荡,无法寻得最优值。

综上,在BP神经网络的训练中综合考虑学习系数和动量因子,可以使得训练

过程即迅速而且平稳,能在较快的时间内找到最佳的权值组合。

16

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1