神经网络学习历程4.docx

上传人:b****2 文档编号:18015224 上传时间:2023-08-05 格式:DOCX 页数:14 大小:43.89KB
下载 相关 举报
神经网络学习历程4.docx_第1页
第1页 / 共14页
神经网络学习历程4.docx_第2页
第2页 / 共14页
神经网络学习历程4.docx_第3页
第3页 / 共14页
神经网络学习历程4.docx_第4页
第4页 / 共14页
神经网络学习历程4.docx_第5页
第5页 / 共14页
神经网络学习历程4.docx_第6页
第6页 / 共14页
神经网络学习历程4.docx_第7页
第7页 / 共14页
神经网络学习历程4.docx_第8页
第8页 / 共14页
神经网络学习历程4.docx_第9页
第9页 / 共14页
神经网络学习历程4.docx_第10页
第10页 / 共14页
神经网络学习历程4.docx_第11页
第11页 / 共14页
神经网络学习历程4.docx_第12页
第12页 / 共14页
神经网络学习历程4.docx_第13页
第13页 / 共14页
神经网络学习历程4.docx_第14页
第14页 / 共14页
亲,该文档总共14页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

神经网络学习历程4.docx

《神经网络学习历程4.docx》由会员分享,可在线阅读,更多相关《神经网络学习历程4.docx(14页珍藏版)》请在冰点文库上搜索。

神经网络学习历程4.docx

神经网络学习历程4

神经网络学习笔记4:

CPN网络的实现

分类:

人工智能2006-11-1916:

181791人阅读评论(0)收藏举报

       对向传播网络(CounterPropagation),简称CPN,是将Kohonen特征映射网络与Grossberg基本竞争型网络相结合,发挥各自长处的一种新型特征映射网络,被广泛的运用于模式分类,函数近似,数据压缩等方面。

       CPN网络分为输入层,竞争层,隐含层。

输入层与竞争层构成SOM网络,竞争层与输出层构成基本竞争型网络,从整体上看,CPN网络属于有教师学习型网络,而由输入层和竞争层构成的SOM网络又属于典型的无教师网络,因此,这一网络既汲取了无教师型网络分类灵活,算法简练的特点,又采纳了有教师型网络分类精确的长处,使两种不同类型的网络结合起来。

     至于CPN网络的学习算法,这里不打算多提,有兴趣的请参考相关书籍。

这里给出一个简单的实现CPN网络的代码.

 '程序实现功能:

CPN神经网络

     '作   者:

laviewpbt

    '联系方式:

laviewpbt@

   'QQ:

33184777

   '版本:

Version1.1.0

    '说明:

复制请保留源作者信息,转载请说明,欢迎大家提出意见和建议

 

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

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

PrivatemErr()AsDouble           '误差

PrivatemS1AsLong                '隐含层的神经元个数    S1

PrivatemS2AsLong                '输出层的神经元个数    S2

PrivatemRAsLong                 '输入层神经元个数      R

PrivatemGoalAsDouble            '收敛的精度

PrivatemLrAsDouble              '隐含层学习速度

PrivatemGamaAsDouble            '输出层学习系数

PrivatemMaxEpochsAsLong         '最大的迭代次数

PrivatemIterationAsLong         '实际的迭代次数

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

PrivateHiddenOut()AsDouble      '输出层的输出

PrivateOutCopy()AsDouble   '比较的

PrivateTsAsLong                 '输入向量的总个数

PrivateInitializedAsBoolean     '是否已初始化

'**************************************** 属性  *******************************************

PublicPropertyGetW1()AsDouble()

   W1=mW1

EndProperty

PublicPropertyGetW2()AsDouble()

   W2=mW2

EndProperty

PublicPropertyGetErr()AsDouble()

   Err=mErr

EndProperty

PublicPropertyGetS1()AsLong

   S1=mS1

EndProperty

PublicPropertyLetS1(ValueAsLong)

   mS1=Value

EndProperty

PublicPropertyGetS2()AsLong

   S2=mS2

EndProperty

PublicPropertyGetGoal()AsDouble

   Goal=mGoal

EndProperty

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

   mLr=0.1

   mGama=0.1

   mGoal=0.0001

   mMaxEpochs=1000

EndSub

'***********************************初始化参数 ***********************************

'

'函数名:

IniParameters

'参   数:

'说   明:

重新定义数组大小,初始化权值矩阵

'作   者:

laviewpbt

'时   间:

2006-11-17

'

'*********************************** 初始化参数 ***********************************

PrivateSubIniParameters(P()AsDouble,T()AsDouble)

   

   DimiAsInteger,jAsInteger

   mS2=UBound(T,1)

   Ts=UBound(T,2)

   mR=UBound(P,1)

   ReDimmW1(mS1,mR)AsDouble

   ReDimmW2(mS2,mS1)AsDouble

   ReDimHiddenOut(mS1)AsDouble

   ReDimOutCopy(mS2,Ts)AsDouble

   ReDimmErr(mMaxEpochs)AsDouble

   Fori=1TomSs

       Forj=1ToTs

           OutCopy(i,j)=T(i,j)'复制原始输出

       Next

   Next

   

   Fori=1TomS1

       Forj=1TomR

           mW1(i,j)=Rnd        '初始正向权值

       Next

   Next

   

   Fori=1TomS2

       Forj=1TomS1

           mW2(i,j)=Rnd        '初始反向权值

       Next

   Next

   Initialized=True

EndSub

'***********************************训练函数 ***********************************

'

'函数名:

Train

'参   数:

P - 输入矩阵

'          T - 对应的输出矩阵

'返回值:

采用CPN训练算法训练网络

'作   者:

laviewpbt

'时   间:

2006-11-19

'

'*********************************** 训练函数 ***********************************

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

   

   DimiAsInteger,jAsInteger,kAsInteger,mAsInteger

   DimMaxIndexAsInteger

   DimSumAsDouble,MaxAsDouble,ErrAsDouble

   IniParametersP,T     '初始化数据

   

   ReDimCopyP(mR,Ts)AsDouble

   Fori=1TomR

       Forj=1ToTs

           CopyP(i,j)=P(i,j)      '备份原始的输入数据,因为在训练中会破坏输入数据

       Next

   Next

   Fori=1ToTs

       Sum=0

       Forj=1TomR

           Sum=Sum+CopyP(j,i)*CopyP(j,i)

       Next

       Sum=Sqr(Sum)

       Forj=1TomR

           IfSum<>0Then             '考虑到输入可能为[000]的形式

               CopyP(j,i)=CopyP(j,i)/Sum  '输入矩阵规一化处理

           EndIf

       Next

   Next

   mIteration=0

   Fori=1TomMaxEpochs

       mIteration=mIteration+1

       Err=0

       Forj=1ToTs

           Fork=1TomS1

               Sum=0

               Form=1TomR

                   Sum=Sum+mW1(k,m)*mW1(k,m) '规一化连接权向量

               Next

               Sum=Sqr(Sum)

               Form=1TomR

                   mW1(k,m)=mW1(k,m)/Sum

               Next

           Next

           

           Fork=1TomS1

               Sum=0

               Form=1TomR

                   Sum=Sum+CopyP(m,j)*mW1(k,m)    '计算隐含层的输出

               Next

               HiddenOut(k)=Sum

           Next

           

           Max=-0.01

           MaxIndex=1

           Fork=1TomS1

               IfMax<=HiddenOut(k)Then '竞争

                   Max=HiddenOut(k)

                   MaxIndex=k

               EndIf

           Next

           Fork=1TomS1

               HiddenOut(k)=0

           Next

           HiddenOut(MaxIndex)=1    '将竞争获胜的神经元的输出置为1,其他为0

           Fork=1TomR

               mW1(MaxIndex,k)=mW1(MaxIndex,k)+mLr*(CopyP(k,j)-mW1(MaxIndex,k))  '隐含层权值调整

           Next

           

           Sum=0

           Fork=1TomR

               Sum=Sum+mW1(MaxIndex,k)*mW1(MaxIndex,k)

           Next

           Sum=Sqr(Sum)

           Fork=1TomR

               mW1(MaxIndex,k)=mW1(MaxIndex,k)/Sum'重新规一化权值

           Next

           

           Fork=1TomS2

               mW2(k,MaxIndex)=mW2(k,MaxIndex)+mGama*(T(k,j)-OutCopy(k,j)) '输出层权值调整

           Next

           Fork=1TomS2

               OutCopy(k,j)=mW2(k,MaxIndex)  '计算网络输出

               Err=Err+(T(k,j)-OutCopy(k,j))*(T(k,j)-OutCopy(k,j))

           Next

       Next

       mErr(mIteration)=Sqr(Err)

       IfmErr(mIteration)

   Next

   

EndSub

'***********************************仿真函数 ***********************************

'

'函数名:

Sim

'参   数:

P - 输入矩阵

'返回值:

返回对应的输出矩阵

'作   者:

laviewpbt

'时   间:

2006-11-19

'

'*********************************** 仿真函数 ***********************************

 

PublicFunctionSim(P()AsDouble)AsDouble()

   

   DimiAsInteger,jAsInteger,TsAsInteger

   DimMaxIndexAsInteger

   DimSumAsDouble,MaxAsDouble

   IfInitialized=FalseThenExitFunction

   Ts=UBound(P,2)

   ReDimCopyP(mR,Ts)AsDouble

   ReDimHiddenOut(mS1)AsDouble

   ReDimOut(mS2,Ts)AsDouble

   

   Fori=1TomR

       Forj=1ToTs

           CopyP(i,j)=P(i,j)  '复制原始数据

       Next

   Next

       

   Fori=1ToTs

       Sum=0

       Forj=1TomR

           Sum=Sum+CopyP(j,i)*CopyP(j,i)

       Next

       Sum=Sqr(Sum)

       Forj=1TomR

           IfSum<>0ThenCopyP(j,i)=CopyP(j,i)/Sum'将输入规一化

       Next

   Next

   

   Fori=1ToTs

       Forj=1TomS1

           Sum=0

           Fork=1TomR

               Sum=Sum+CopyP(k,i)*mW1(j,k)

           Next

           HiddenOut(j)=Sum     '隐含层输出

       Next

       Max=-0.01

       MaxIndex=1

       Forj=1TomS1

           IfMax<=HiddenOut(j)Then

               Max=HiddenOut(j)

               MaxIndex=j

           EndIf

       Next

       HiddenOut(MaxIndex)=1    '竞争获胜

       Fork=1TomS2

           Out(k,i)=mW2(k,MaxIndex)   '输出

       Next

   Next

   Sim=Out

   

EndFunction

'*********************************** 绘制误差曲线 ***********************************

'

'过程名:

DrawErrorCurve

'参   数:

pic  - 曲线绘制的容器

'          Color- 曲线的颜色

'作   者:

laviewpbt

'时   间:

2006-11-15

'

'*********************************** 绘制误差曲线 ***********************************

PublicSubDrawErrorCurve(picAsPictureBox,ColorAsOLE_COLOR)

   pic.AutoRedraw=True

   pic.Cls

   pic.BorderStyle=0

   pic.Scale(-0.15,1)-(1.1,-0.1)

   pic.Line(-0.15,1)-(1.095,-0.095),vbBlue,B

   DimMaxAsDouble,iAsLong

   Fori=1TomIteration

       IfMax

   Next

   pic.Line(0,0)-(0,1),Color

   pic.Line(0,0)-(1.1,0),Color

   Fori=1TomIteration-1

       pic.Line(i/mIteration,mErr(i)/Max)-((i+1)/mIteration,mErr(i+1)/Max),Color

   Next

   Fori=1To6

       pic.CurrentY=-0.02

       pic.CurrentX=0.2*(i-1)-pic.TextWidth(mIteration/5*(i-1))

       pic.PrintCInt(mIteration/5*(i-1))

   Next

       Fori=1To6

       pic.CurrentX=-0.13

       pic.CurrentY=0.2*(i-1)-pic.TextHeight("5")+0.02

       pic.PrintFormat(Max/5*(i-1),"0.00")

   Next

   pic.CurrentX=0.6-pic.TextWidth("误差曲线")

   pic.CurrentY=0.95

   pic.Print"误差曲线"

EndSub

 

'***********************************矩阵形式转为字符串 ***********************************

'

'函数名:

MatrixToString

'参   数:

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

当前位置:首页 > 初中教育 > 理化生

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

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