BP神经网络源代码basic.docx
- 文档编号:3600281
- 上传时间:2022-11-24
- 格式:DOCX
- 页数:8
- 大小:15.78KB
BP神经网络源代码basic.docx
《BP神经网络源代码basic.docx》由会员分享,可在线阅读,更多相关《BP神经网络源代码basic.docx(8页珍藏版)》请在冰豆网上搜索。
BP神经网络源代码basic
PrivateSubCommand5_Click()
DimtempNumAsDouble
FactTimes=0
Forloopt=0Totimes-1'学习次数
FactTimes=FactTimes+1
tempNum=0
IfFactTimes<2000Then'学习率的变化前大后小
alpha=0.5
beta=0.5
Else
IfFactTimes>2000AndFactTimes<5000Then
alpha=0.4
beta=0.4
Else
alpha=0.3
beta=0.3
EndIf
EndIf
'开始神经网络计算
'/*---Beginningofneuralcomputting---*/
Forloopl=1ToLearnExampleNums '学习模式个数
'/*forwardcomputting*/
'/*inputlayer*/
Fori=1ToInputUnitNums
OutofInputLayer(i)=inDatas(loopl,i)
Nexti
'/*hidelayer*/
Fori=1ToHideUnitNums
inival=CDbl(0)
Forj=1ToInputUnitNums
inival=inival+w_InputHide(i,j)*OutofInputLayer(j)
Nextj
inival=inival+Cw_Hide(i)
OutofHideLayer(i)=Sigmf(inival)
Nexti
'/*outputlayer*/
Fori=1ToOutUnitNums
inival=0#
Forj=1ToHideUnitNums
inival=inival+w_HideOut(i,j)*OutofHideLayer(j)
Nextj
inival=inival+Cw_Out(i)
OutofOutLayer(i)=Sigmf(inival)
Nexti
'/*---Backpropagation---*/
'/*deltacaclculate*/
Error=0#
Fori=1ToOutUnitNums
wk=OutofOutLayer(i)
wkb=Teacher(loopl,i)-wk
'计算每个学习模式中各个输出结点的误差平方和
Error=Error+wkb*wkb
DEL_Out(i)=wkb*wk*(1#-wk)
Nexti
'/*deltacaclculate*/
Fori=1ToHideUnitNums
inival=0#
Forj=1ToOutUnitNums
inival=inival+(DEL_Out(j)*w_HideOut(j,i))
Nextj
wk=OutofHideLayer(i)
DEL_Hide(i)=inival*wk*(1#-wk)
Nexti
'/*updatingforweightsfromHideLayer*/
Fori=1ToOutUnitNums
DCw_Out(i)=alpha*DEL_Out(i)
Forj=1ToHideUnitNums
Dw_HideOut(i,j)=alpha*DEL_Out(i)*OutofHideLayer(j)
Nextj
Nexti
'/*updatingforweightsfromInputLayer*/
Fori=1ToHideUnitNums
DCw_Hide(i)=beta*DEL_Hide(i)
Forj=1ToInputUnitNums
Dw_InputHide(i,j)=beta*DEL_Hide(i)*OutofInputLayer(j)
Nextj
Nexti
'*inputlayertohidelayer
Fori=1ToHideUnitNums
wk=moment*OCw_Hide(i)+DCw_Hide(i)
Cw_Hide(i)=Cw_Hide(i)+wk
OCw_Hide(i)=wk
Forj=1ToInputUnitNums
wk=moment*Ow_InputHide(i,j)+Dw_InputHide(i,j)
w_InputHide(i,j)=w_InputHide(i,j)+wk
Ow_InputHide(i,j)=wk
Nextj
Nexti
'*hidelayertooutputlayer
Fori=1ToOutUnitNums
wk=moment*OCw_Out(i)+DCw_Out(i)
Cw_Out(i)=Cw_Out(i)+wk
OCw_Out(i)=wk
Forj=1ToHideUnitNums
wk=moment*Ow_HideOut(i,j)+Dw_HideOut(i,j)
w_HideOut(i,j)=w_HideOut(i,j)+wk
Ow_HideOut(i,j)=wk
Nextj
Nexti
'所有学习模式的误差总和
tempNum=tempNum+Error
Nextloopl
'如果达到了要求的误差范围,就可以退出循环
If((tempNum/2)<=ErLimit)Then
ExitFor
EndIf
Nextloopt
List1.Clear
Fori=1ToOutUnitNums
Forj=iToHideUnitNums
List1.AddItem"w_HideOut("&i&","&j&")="&w_HideOut(i,j)
Nextj
List1.AddItem"OutofOutLayer("&i&")"&OutofOutLayer(i)
Nexti
Fori=1ToHideUnitNums
Forj=1ToInputUnitNums
List1.AddItem"w_InputHide("&i&","&j&")="&w_InputHide(i,j)
Nextj
List1.AddItem"OutofHideLayer("&i&")="&OutofHideLayer(i)
Nexti
List1.AddItem"全局误差="&Format$(tempNum/2,"##.###,#")
List1.AddItem"预测误差="&Format$(Sqr(tcmpNum/2),"##.###")
List1.AddItem"循环次数="&FactTimes
'cmdSave.Enabled=True
'cmdNetCal.Enabled=False
Beep
vsFlexArray3.Rows=HideUnitNums+1
vsFlexArray3.Cols=InputUnitNums+1
vsFlexArray5.Rows=HideUnitNums+1
Fori=1ToHideUnitNums
vsFlexArray5.TextMatrix(i,1)=Cw_Hide(i)
Forj=1ToInputUnitNums
vsFlexArray3.TextMatrix(i,j)=w_InputHide(i,j)
Nextj
Nexti
vsFlexArray3.SaveGridApp.Path&"WeightlN_HD.dat",flexFileAll
vsFlexArray5.SaveGridApp.Path&"OffsetHIDE.dat",flexFileAll
vsFlexArray4.Rows=OutUnitNums+1
vsFlexArray4.Cols=HideUnitNums+1
vsFlexArray6.Rows=OutUnitNums+1
Fori=1ToOutUnitNums
vsFlexArray6.TextMatrix(i,1)=Cw_Out(i)
Forj=1ToHideUnitNums
vsFlexArray4.TextMatrix(i,j)=w_HideOut(i,j)
Nextj
Nexti
vsFlexArray4.SaveGridApp.Path&"WeightHD_OT.dat",flexFileAll
vsFlexArray6.SaveGridApp.Path&"OffsetOUT.dat",flexFileAll
EndSub
PrivateSubCommand6_Click()
vsFlexArray1.Rows=2
vsFlexArray1.Cols=Text1.Text+1
vsFlexArray2.Rows=2
vsFlexArray2.Cols=Text3.Text+1
vsFlexArray3.Rows=Text2.Text+1
vsFlexArray3.Cols=Text1.Text+1
vsFlexArray4.Rows=Text3.Text+1
vsFlexArray4.Cols=Text2.Text+1
vsFlexArray5.Rows=Text2.Text+1
vsFlexArray5.Cols=2
vsFlexArray6.Rows=Text3.Text+1
vsFlexArray6.Cols=2
LearnExampleNums=1'每次只验证一个数据
vsFlexArray1.Clear
vsFlexArray2.Clear
vsFlexArray2.Enabled=False
vsFlexArray2.Editable=False
vsFlexArray1.SetFocus
MsgBox"请在学习样本网格中输入数据!
"
EndSub
PrivateSubCommand7_Click()
DimNums()AsDouble
ReDimNums(vsFlexArray1.Cols-1)
Fori=1ToText1.Text
Nums(i)=vsFlexArray1.TextMatrix(1,i)
Nexti
'读入INPUTTOHIDE权值文件
vsFlexArray3.LoadGridApp.Path&"WeightlN_ttD.dat",flexFileAll
'读入HIDETOOUTPUT权值文件
vsFlexArray4.LoadGridApp.Path&"WeightHD_OT.dat",flexFileAll
'读入HIDE层偏置文件
vsFlexArray5.LoadGridApp.Path&"OffsetHIDE.dat",flexFileAll
'读入OUTPUT层偏置值文件
vsFlexArray6.LoadGridApp.Path&"OffsetOUT.dat",flexFileAll
'/*hidelayer*/
Fori=1ToHideUnitNums
inival=0#
Forj=1ToInputUnitNums
inival=inival+vsFlexArray3.TextMatrix(i,j)*Nums(j)
Nextj
inival=inival+vsFlexArray5.TextMatrix(i,1)
OutofHideLayer(i)=Sigmf(inival)
Nexti
'/*outputlayer*/
Fori=1ToOutUnitNums
inival=0#
Forj=1ToHideUnitNums
inival=inival+vsFlexArray4.TextMatrix(i,j)*OutofHideLayer(j)
Nextj
inival=inival+vsFlexArray6.TextMatrix(i,1)
OutofOutLayer(i)=Sigmf(inival)
Label2.Caption="验证结果:
"
vsFlexArray2.TextMatrix(1,i)=Format(OutofOutLayer(i),"#,###.###,#")
Nexti
Command9.Enabled=True
EndSub
PrivateSubCommand8_Click()
End
EndSub
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- BP 神经网络 源代码 basic