反向传播算法也称BP算法由于这种算法在本质上是一种神.docx

上传人:b****1 文档编号:10215729 上传时间:2023-05-24 格式:DOCX 页数:20 大小:84.08KB
下载 相关 举报
反向传播算法也称BP算法由于这种算法在本质上是一种神.docx_第1页
第1页 / 共20页
反向传播算法也称BP算法由于这种算法在本质上是一种神.docx_第2页
第2页 / 共20页
反向传播算法也称BP算法由于这种算法在本质上是一种神.docx_第3页
第3页 / 共20页
反向传播算法也称BP算法由于这种算法在本质上是一种神.docx_第4页
第4页 / 共20页
反向传播算法也称BP算法由于这种算法在本质上是一种神.docx_第5页
第5页 / 共20页
反向传播算法也称BP算法由于这种算法在本质上是一种神.docx_第6页
第6页 / 共20页
反向传播算法也称BP算法由于这种算法在本质上是一种神.docx_第7页
第7页 / 共20页
反向传播算法也称BP算法由于这种算法在本质上是一种神.docx_第8页
第8页 / 共20页
反向传播算法也称BP算法由于这种算法在本质上是一种神.docx_第9页
第9页 / 共20页
反向传播算法也称BP算法由于这种算法在本质上是一种神.docx_第10页
第10页 / 共20页
反向传播算法也称BP算法由于这种算法在本质上是一种神.docx_第11页
第11页 / 共20页
反向传播算法也称BP算法由于这种算法在本质上是一种神.docx_第12页
第12页 / 共20页
反向传播算法也称BP算法由于这种算法在本质上是一种神.docx_第13页
第13页 / 共20页
反向传播算法也称BP算法由于这种算法在本质上是一种神.docx_第14页
第14页 / 共20页
反向传播算法也称BP算法由于这种算法在本质上是一种神.docx_第15页
第15页 / 共20页
反向传播算法也称BP算法由于这种算法在本质上是一种神.docx_第16页
第16页 / 共20页
反向传播算法也称BP算法由于这种算法在本质上是一种神.docx_第17页
第17页 / 共20页
反向传播算法也称BP算法由于这种算法在本质上是一种神.docx_第18页
第18页 / 共20页
反向传播算法也称BP算法由于这种算法在本质上是一种神.docx_第19页
第19页 / 共20页
反向传播算法也称BP算法由于这种算法在本质上是一种神.docx_第20页
第20页 / 共20页
亲,该文档总共20页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

反向传播算法也称BP算法由于这种算法在本质上是一种神.docx

《反向传播算法也称BP算法由于这种算法在本质上是一种神.docx》由会员分享,可在线阅读,更多相关《反向传播算法也称BP算法由于这种算法在本质上是一种神.docx(20页珍藏版)》请在冰点文库上搜索。

反向传播算法也称BP算法由于这种算法在本质上是一种神.docx

反向传播算法也称BP算法由于这种算法在本质上是一种神

反向传播算法也称BP算法。

由于这种算法在本质上是一种神经网络学习的数学模型,所以,有时也称为BP模型。

BP算法是为了解决多层前向神经网络的权系数优化而提出来的;所以,BP算法也通常暗示着神经网络的拓扑结构是一种无反馈的多层前向网络,它含有输人层、输出层以及处于输入输出层之间的中间层。

中间层有单层或多层,由于它们和外界没有直接的联系,故也称为隐层。

在隐层中的神经元也称隐单元。

隐层虽然和外界不连接.但是,它们的状态则影响输入输出之间的关系。

这也是说,改变隐层的权系数,可以改变整个多层神经网络的性能。

   '程序实现功能:

模拟QQ截屏

    

PrivatemW1()AsDouble            '隐含层的权值          S1  X  R

PrivatemW2()AsDouble            '输出层的权值          S2  X  R

PrivatemB1()AsDouble            '隐含层的偏置值        S1  X  1

PrivatemB2()AsDouble            '输出层的偏置值        S2  X  1

PrivatemErr()AsDouble            '均方误差

PrivatemMinMax()AsDouble        '输入向量的上下限      R  X  2

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

EndProperty

PublicPropertyGetB1()AsDouble()

    B1=mB1

EndProperty

PublicPropertyGetB2()AsDouble()

    B2=mB2

EndProperty

PublicPropertyGetErr()AsDouble()

    Err=mErr

EndProperty

PublicPropertyGetS1()AsLong

    S1=mS1

EndProperty

PublicPropertyLetS1(ValueAsLong)

    mS1=Value

EndProperty

PublicPropertyGetS2()AsLong

    S2=mS2

EndProperty

PublicPropertyGetR()AsLong

    R=mR

EndProperty

PublicPropertyGetGoal()AsDouble

    Goal=mGoal

EndProperty

PublicSubMinMax(Value()AsDouble)

    mMinMax=Value

EndSub

PublicPropertyLetGoal(ValueAsDouble)

    mGoal=Value

EndProperty

PublicPropertyGetLr()AsDouble

    Lr=mLr

EndProperty

PublicPropertyLetLr(ValueAsDouble)

    mLr=Value

EndProperty

PublicPropertyGetGama()AsDouble

    Gama=mGama

EndProperty

PublicPropertyLetGama(ValueAsDouble)

    mGama=Value

EndProperty

PublicPropertyGetMaxEpochs()AsLong

    MaxEpochs=mMaxEpochs

EndProperty

PublicPropertyLetMaxEpochs(ValueAsLong)

    mMaxEpochs=Value

EndProperty

PublicPropertyGetiteration()AsLong

    iteration=mIteration

EndProperty

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

PrivateSubClass_Initialize()

    mS1=5

    mGoal=0.0001

    mLr=0.1

    mGama=0.8

    mMaxEpochs=1000

EndSub

'***********************************  训练  ***********************************

'

'过程名:

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)              '正在处理的输出向量

        Next

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

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

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

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

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

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

        IfiterationMod1000=0ThenRaiseEventUpdate(mIteration)

        IfmErr(mIteration)

    Next

EndSub

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

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

    Randomize

    Fori=1TomS1

        mB1(i)=2*Rnd-1

        Forj=1TomR

            mW1(i,j)=2*Rnd-1

        Next

    Next

    Fori=1TomS2

        mB2(i)=2*Rnd-1

        Forj=1TomS1

            mW2(i,j)=2*Rnd-1

        Next

    Next

    NormalizeInputP

    Initialized=True

EndSub

'***********************************  输入数据影射到-1和1之间  ***********************************

PrivateSubNormalizeInput(P()AsDouble)

    DimiAsInteger,jAsInteger,mAsInteger,nAsInteger

    m=UBound(P,1):

n=UBound(P,2)

    Fori=1Tom

        Forj=1Ton

            P(i,j)=2*(P(i,j)-mMinMax(i,1))/(mMinMax(i,2)-mMinMax(i,1))-1

        Next

    Next

EndSub

'***********************************  隐含层的数据  ***********************************

PrivateSubHiddenLayer()

    DimiAsLong,jAsLong

    DimSumAsDouble

    Fori=1TomS1

        Sum=0

        Forj=1TomR

            Sum=Sum+mW1(i,j)*Pdealing(j)

        Next

        HiddenOutput(i)=1/(1+Exp(-(Sum+mB1(i))))

    Next

EndSub

'***********************************  输出层的数据  ***********************************

PrivateSubOutputLayer()

    DimiAsLong,jAsLong

    DimSumAsDouble

    Fori=1TomS2

        Sum=0

        Forj=1TomS1

            Sum=Sum+mW2(i,j)*HiddenOutput(j)

        Next

        OutOutput(i)=Sum+mB2(i)

    Next

EndSub

'***********************************  输出层的误差  ***********************************

PrivateSubOutError()

    DimiAsLong,jAsLong,MseAsDouble

    Fori=1TomS2

        OutPutErr(i)=Tdealing(i)-OutOutput(i)

        Mse=Mse+OutPutErr(i)*OutPutErr(i)

    Next

    mErr(mIteration)=Sqr(Mse/mS2)  '用某次迭代的均方误差来代替整体的均方误差

EndSub

'***********************************  隐含层的误差  ***********************************

PrivateSubHiddenError()

    DimiAsLong,jAsLong

    DimSumAsDouble

    Fori=1TomS1

        Sum=0

        Forj=1TomS2

            Sum=Sum+OutPutErr(j)*mW2(j,i)

        Next

        HiddenErr(i)=Sum*(HiddenOutput(i))*(1-HiddenOutput(i))

    Next

EndSub

'***********************************  更新输出层的权值和偏置值  ***********************************

PrivateSubUpdate_W2B2()

    DimiAsLong,jAsLong

    DimTempAsDouble

    Fori=1TomS2

        Forj=1TomS1

            Temp=mLr*OutPutErr(i)*HiddenOutput(j)+mGama*OldW2(i,j)'动量学习方法

            mW2(i,j)=mW2(i,j)+Temp

            OldW2(i,j)=Temp

        Next

        Temp=mLr*OutPutErr(i)+mGama*OldB2(i)

        mB2(i)=mB2(i)+Temp

        OldB2(i)=Temp

    Next

EndSub

'***********************************  更新隐含层的权值和偏置值  ***********************************

PrivateSubUpdate_W1B1()

    DimiAsLong,jAsLong

    DimTempAsDouble

    Fori=1TomS1

        Forj=1TomR

            Temp=mLr*HiddenErr(i)*Pdealing(j)+mGama*OldW1(i,j)

            mW1(i,j)=mW1(i,j)+Temp

            OldW1(i,j)=Temp

        Next

        Temp=mLr*HiddenErr(i)+mGama*OldB1(i)

        mB1(i)=mB1(i)+Temp

        OldB1(i)=Temp

    Next

EndSub

'***********************************  均方误差  ***********************************

'PrivateFunctionMse(P()AsDouble,T()AsDouble)AsDouble

    'DimTemp()AsDouble

    'DimiAsInteger,jAsInteger,SumAsDouble,SubsAsDouble

    'Temp=Sim(P)

    'Fori=1TomS2

        'Forj=1ToTs

            'Subs=Temp(i,j)-T(i,j)

            'Sum=Sum+Subs*Subs

        'Next

    'Next

    'Mse=Sum/mS2/Ts

'EndFunction

'***********************************  复制数组  ***********************************

PrivateFunctionCopyArray(P()AsDouble)AsDouble()

    CopyArray=P

EndFunction

PublicFunctionSim(P()AsDouble)AsDouble()

    DimiAsInteger,jAsInteger,kAsInteger

    DimRAsInteger,TAsInteger

    DimHiddenOut()AsDouble,OutOut()AsDouble,NmP()AsDouble

    R=UBound(P,1):

T=UBound(P,2)

    ReDimHiddenOut(mS1,T)AsDouble,OutOut(mS2,T)AsDouble

    IfInitialized=FalseThenExit

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

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2