BP神经网络VB程序汇总Word文件下载.docx

上传人:b****6 文档编号:18981458 上传时间:2023-01-02 格式:DOCX 页数:53 大小:32.39KB
下载 相关 举报
BP神经网络VB程序汇总Word文件下载.docx_第1页
第1页 / 共53页
BP神经网络VB程序汇总Word文件下载.docx_第2页
第2页 / 共53页
BP神经网络VB程序汇总Word文件下载.docx_第3页
第3页 / 共53页
BP神经网络VB程序汇总Word文件下载.docx_第4页
第4页 / 共53页
BP神经网络VB程序汇总Word文件下载.docx_第5页
第5页 / 共53页
点击查看更多>>
下载资源
资源描述

BP神经网络VB程序汇总Word文件下载.docx

《BP神经网络VB程序汇总Word文件下载.docx》由会员分享,可在线阅读,更多相关《BP神经网络VB程序汇总Word文件下载.docx(53页珍藏版)》请在冰豆网上搜索。

BP神经网络VB程序汇总Word文件下载.docx

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)

EndSub

 

PrivatemW1()AsDouble'

隐含层的权值S1XR

PrivatemW2()AsDouble'

输出层的权值S2XR

PrivatemB1()AsDouble'

隐含层的偏置值S1X1

PrivatemB2()AsDouble'

输出层的偏置值S2X1

PrivatemErr()AsDouble'

均方误差

PrivatemMinMax()AsDouble'

输入向量的上下限RX2

PrivatemS1AsLong'

隐含层的神经元个数S1

PrivatemS2AsLong'

输出层的神经元个数S2

PrivatemRAsLong'

输入层神经元个数R

PrivatemGoalAsDouble'

收敛的精度

PrivatemLrAsDouble'

学习速度

PrivatemGamaAsDouble'

动量系数

PrivatemMaxEpochsAsLong'

最大的迭代次数

PrivatemIterationAsLong'

实际的迭代次数

****************************************中间变量*******************************************

PrivateHiddenOutput()AsDouble'

隐含层的输出

PrivateOutOutput()AsDouble'

输出层的输出

PrivateHiddenErr()AsDouble'

隐含层各神经元的误差

PrivateOutPutErr()AsDouble'

输出层各神经元的误差

PrivatePdealing()AsDouble'

当前正在处理的输入

PrivateTdealing()AsDouble'

当前正在处理的输入对应的输出

PrivateOldW1()AsDouble'

旧权值数组

PrivateOldW2()AsDouble'

PrivateOldB1()AsDouble'

旧偏置值数组

PrivateOldB2()AsDouble'

PrivateTsAsLong'

输入向量的总个数

PrivateInitializedAsBoolean'

是否已初始化

****************************************属性*******************************************

PublicEventUpdate(iteration)

PublicPropertyGetW1()AsDouble()

W1=mW1

EndProperty

PublicPropertyGetW2()AsDouble()

W2=mW2

PublicPropertyGetB1()AsDouble()

B1=mB1

PublicPropertyGetB2()AsDouble()

B2=mB2

PublicPropertyGetErr()AsDouble()

Err=mErr

PublicPropertyGetS1()AsLong

S1=mS1

PublicPropertyLetS1(ValueAsLong)

mS1=Value

PublicPropertyGetS2()AsLong

S2=mS2

PublicPropertyGetR()AsLong

R=mR

PublicPropertyGetGoal()AsDouble

Goal=mGoal

PublicSubMinMax(Value()AsDouble)

mMinMax=Value

PublicPropertyLetGoal(ValueAsDouble)

mGoal=Value

PublicPropertyGetLr()AsDouble

Lr=mLr

PublicPropertyLetLr(ValueAsDouble)

mLr=Value

PublicPropertyGetGama()AsDouble

Gama=mGama

PublicPropertyLetGama(ValueAsDouble)

mGama=Value

PublicPropertyGetMaxEpochs()AsLong

MaxEpochs=mMaxEpochs

PublicPropertyLetMaxEpochs(ValueAsLong)

mMaxEpochs=Value

PublicPropertyGetiteration()AsLong

iteration=mIteration

****************************************初始化*******************************************

PrivateSubClass_Initialize()

mS1=5

mGoal=0.0001

mLr=0.1

mGama=0.8

mMaxEpochs=1000

***********************************训练***********************************

过程名:

Train

参数:

P-输入矩阵

T-输出矩阵

作者:

laviewpbt

时间:

2006-11-15

PublicSubTrain(P()AsDouble,T()AsDouble)

DimiAsLong,jAsLong,IndexAsLong

DimNmP()AsDouble

mR=UBound(P,1)'

输入向量的元素个数

mS2=UBound(T,1)'

输出层神经元的个数

Ts=UBound(P,2)'

输入向量的个数

NmP=CopyArray(P)'

保留原始的P,因为正规化的过程中会破坏原始数据

IniParametersNmP'

初始化参数和数组

mIteration=0

Fori=1TomMaxEpochs

mIteration=mIteration+1

Index=Int(Rnd*Ts+1)'

随机选取一个输入向量作为训练样本,这样效果比按顺序循环要好

Forj=1TomR

Pdealing(j)=NmP(j,Index)'

正在处理的输入向量

Next

Forj=1TomS2

Tdealing(j)=T(j,Index)'

正在处理的输出向量

HiddenLayer'

计算隐含层各神经元的输出

OutputLayer'

计算输出层各神经元的输出

OutError'

计算输出层各神经元的误差

HiddenError'

计算隐含层各神经元的误差

Update_W2B2'

更新隐含层至输出层之间的连接权及输出层节点的偏置值

Update_W1B1'

更新输入层至隐含层之间的连接权及隐含层节点的偏置值

IfiterationMod1000=0ThenRaiseEventUpdate(mIteration)

IfmErr(mIteration)<

mGoalThenExitSub'

达到要求,完成学习,退出

***********************************初始化数据***********************************

PrivateSubIniParameters(P()AsDouble)

DimiAsLong,jAsLong

ReDimmW1(mS1,mR)AsDouble,mW2(mS2,mS1)AsDouble

ReDimmB1(mS1)AsDouble,mB2(mS2)AsDouble

ReDimOldW1(mS1,mR)AsDouble,OldW2(mS2,mS1)AsDouble

ReDimOldB1(mS1)AsDouble,OldB2(mS2)AsDouble

ReDimHiddenOutput(mS1)AsDouble,OutOutput(mS2)AsDouble

ReDimHiddenErr(mS1)AsDouble,OutPutErr(mS2)AsDouble

ReDimPdealing(mR)AsDouble,Tdealing(mS2)AsDouble

ReDimmErr(mMaxEpochs)A

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

当前位置:首页 > 自然科学 > 化学

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

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