《神经网络导论》实验二-双向联想记忆 (1).docx

上传人:b****9 文档编号:116253 上传时间:2022-10-03 格式:DOCX 页数:6 大小:22.06KB
下载 相关 举报
《神经网络导论》实验二-双向联想记忆 (1).docx_第1页
第1页 / 共6页
《神经网络导论》实验二-双向联想记忆 (1).docx_第2页
第2页 / 共6页
《神经网络导论》实验二-双向联想记忆 (1).docx_第3页
第3页 / 共6页
《神经网络导论》实验二-双向联想记忆 (1).docx_第4页
第4页 / 共6页
《神经网络导论》实验二-双向联想记忆 (1).docx_第5页
第5页 / 共6页
点击查看更多>>
下载资源
资源描述

《神经网络导论》实验二-双向联想记忆 (1).docx

《《神经网络导论》实验二-双向联想记忆 (1).docx》由会员分享,可在线阅读,更多相关《《神经网络导论》实验二-双向联想记忆 (1).docx(6页珍藏版)》请在冰豆网上搜索。

《神经网络导论》实验二-双向联想记忆 (1).docx

实验2双向联想记忆

一、实验目的

熟悉Kosko型双向联想记忆网络的原理与结构,通过仿真实验掌握具体的实现方法,了解该网络的功能及性能,加深对该类网络的稳定状态和能量函数等概念的理解。

二、实验原理

联想记忆功能分为自联想和异联想,异联想也称为双向联想记忆,简写为BAM。

BAM存储器可存储两组矢量,若有如下N维矢量A和P维矢量B:

A=[a0,a1,⋯aN-1]T∈{-1,1}N

B=[b0,b1,⋯bP-1]T∈{-1,1}P

构成M对矢量As,Bs,s=0,1,⋯,M-1,给定A可经联想得到对应的标准样本B,当有噪声或残缺时,联想功能可使样本对复原。

如图1所示,与矢量A相应的一层有N个节点,另一层对应矢量B,有P个节点,两层间双向连接。

假定B到A的传输为正向,正向的权矩阵为W。

如果输入矢量由上层加入,且相应于网络中B的稳定状态,则经W之作用产生A稳定状态。

当任意矢量输入时,网络要经若干次次迭代计算演变至稳态,过程可示意为:

WBt→At+1

WTAt+1→Bt+2

WBt+2→At+3

直至A、B为稳态,演变过程结束。

网络学习遵从Hebb规则,若给定M个双极性矢量对:

A0,B0,A1,B1,⋯,(AM-1,BM-1)

则正,反向权矩阵为:

W=s=0M-1As,BsT

WT=s=0M-1Bs,AsT

如果BAM网络神经元函数值为0,则称为齐次BAM网络,其能量函数为:

EA,B=-12ATWB-12BTWTA=-ATWB

三、实验内容及步骤

2、连接权值W=

422-20-20-240

200-420202-2

200020-2-422

-2-4002020-2-2

0222-4-20200

-2000-2024-2-2

02-2202-4-204

-20-4024-20-22

422-20-20-240

0-22-20-2420-4

0-2220-20-200

-2-4002020-2-2

2400-20-2022

02-2-2020200

02-2202-4-204

稳定状态能量值:

E=-158-142-158-146

3、验证网络的联想能力

对B2采用W进行迭代直到稳定求得的A‘2与原A2相同。

对A3采用W进行迭代直到稳定求得的B‘3与原B3相同。

4、验证网络抗噪能力

取A1畸变度为3,观察10次输出,显示能量

correct:

1andenergy:

-82-158

correct:

1andenergy:

-90-158

correct:

0andenergy:

-98-146

correct:

1andenergy:

-90-158

correct:

1andenergy:

-106-158

correct:

1andenergy:

-98-158

correct:

1andenergy:

-98-158

correct:

1andenergy:

-98-158

correct:

1andenergy:

-98-158-158-158

correct:

1andenergy:

-98-158

5、噪声大小对联想能力的影响

分别对A取反1到3位数各验证300次:

thedegreeofaccuracyfromA1toA4:

1bit2bits3bits

1.00000.97330.8400

1.00000.95670.8067

0.91000.76000.5633

1.00000.88330.5767

分别对B取反1到3位数验证100次:

thedegreeofaccuracyfromB1toB4:

1bit2bits3bits

1.00000.70000.3200

0.82000.72000.3500

0.94000.55000.1600

0.76000.64000.1600

四、实验思考题

1、在实验步骤4中观察网络能量E是如何变化的?

根据网络机理说明原因。

从步骤4中可以看出,网络能量E随迭代的次数而减小。

这是因为双向联想网络是Hopfield网络的一种,网络总是朝着能量函数E减小的方向运动,且达到稳态时,E取极小值。

2、如果我们想要“擦除”存储矢量中的某对(Ai,Bi),应如何调整网络?

双向联想记忆网络特性主要体现在权值W上,如果想要“擦除”存储矢量中的某对(Ai,Bi),取:

W'=W-Ai∙BiT

3、通过总结第5步和第6步的实验结果,得出什么结论?

简要解释其中的原因。

随着矢量位取反的位数增多,噪声增大,网络联想正确率剧烈下降,说明网络恢复的记忆力是有限的。

这种二进制的存储映射是一对一的,容差性差。

五、实验结论

对于Kosko型其次双向联想记忆网络:

1随着时间的推移,网络在状态空间中总是朝着能量函数减小的方向移动,当网络达到稳定时,能量取得极小值。

2随着网络噪声的增大,网络联想正确率下降,同时说明网络恢复的记忆力是有限的。

六、MATLAB源程序

clear;clc

disp('实验步骤2显示连接权矩阵及能量值');

A=[A1A2A3A4];B=[B1B2B3B4];W=zeros(15,10);

fors=1:

4

W=W+A(:

s)*B(:

s)';

end

W

E=zeros(4,1);

%E=diag(-A'*W*B);

fors=1:

4

E(s)=-A(:

s)'*W*B(:

s);

end

E

clearEs

disp('实验步骤3验证网络联想能力')

disp('1chooseB2totest')

B2_fo=B2;

B2_la=1;A2_fo=2;A2_la=3;

while~isequal(A2_fo,A2_la)||~isequal(B2_fo,B2_la)

A2_fo=hardlims(W*B2_fo);

B2_la=hardlims(W'*A2_fo);

A2_la=hardlims(W*B2_la);

B2_fo=hardlims(W'*A2_la);

end

disp('correctornot:

')

disp(isequal(A2,A2_la)&&isequal(B2,B2_la))

clearB2_foB2_laA2_foA2_la

disp('2chooseA3totest')

A3_fo=A3;

A3_la=1;B3_fo=2;B3_la=3;

while~(isequal(A3_fo,A3_la)&&isequal(B3_fo,B3_la))

B3_fo=hardlims(W'*A3_fo);

A3_la=hardlims(W*B3_fo);

B3_la=hardlims(W'*A3_la);

A3_fo=hardlims(W*B3_la);

end

disp('correctornot:

')

disp(isequal(A3,A3_la)&&isequal(B3,B3_la))

clearB3_foB3_laA3_foA3_la

disp('实验步骤4验证网络的抗噪能力')

disp('取A1畸变度为3,观察10次输出,显示能量')

forqbx=1:

10

A1_zs=A1.*(1-2*randerr(1,15,3)');

A1_fo=A1_zs;Ezs=[];

A1_la=1;B1_fo=2;B1_la=3;

while~(isequal(A1_fo,A1_la)&&isequal(B1_fo,B1_la))

B1_fo=hardlims(W'*A1_fo);

ezs=-A1_fo'*W*B1_fo;Ezs=[Ezs,ezs];

A1_la=hardlims(W*B1_fo);

B1_la=hardlims(W'*A1_la);

ezs=-A1_la'*W*B1_la;Ezs=[Ezs,ezs];

A1_fo=hardlims(W*B1_la);

end

state3=isequal(A1,A1_la)&&isequal(B1,B1_la);

disp([strcat('correct:

',num2str(state3),'andenergy:

'),num2str(Ezs)]);

end

clearB1_foB1_laA1_foA1_lastate3ezsEzsA1_zs

disp('实验步骤5噪声大小对联想能力的影响')

disp('分别对A取反1到3位数各验证300次')

times=[300300300];%循环次数向量

forqbx123=1:

3%取反1到3位数%分别取出times各项

state4=0;%验证正确与否的状态矩阵,用0和1表示

forqbxa=1:

4%分别取出A的每一列,即A1到A4进行操作

forqbx=1:

times(qbx123)%循环次数

A_zs=A(:

qbxa).*(1-2*randerr(1,15,qbx123)');%随机位取反

A_fo=A_zs;%输入矢量Ai

A_la=3;B_fo=1;B_la=2;%声明迭代过程矢量

while~(isequal(A_fo,A_la)&&isequal(B_fo,B_la))%Ai和Bi迭代后状态稳定了吗

B_fo=hardlims(W'*A_fo);

A_la=hardlims(W*B_fo);

B_la=hardlims(W'*A_la);

A_fo

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

当前位置:首页 > 求职职场 > 简历

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

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