?? 5-5-2.m
字號:
%初始化正向權值w和反向權值v
w=rands(18,2)/2+0.5;
v=rands(5,18)/2+0.5;
%輸入向量P和目標向量T
P=[0 0;0.5 0.5;0 0.5;1 3;0.5 1;1 0.5];
T=[1 0 0 0 0;1 0 0 0 0;0 1 0 0 0;0 0 1 0 0;0 0 0 1 0;0 0 0 0 1];
T_out=T;
%設定學習步數為1000次
epoch=1000;
%歸一化輸入向量P
for i=1:6
if P(i,:)==[0 0]
P(i,:)=P(i,:);
else
P(i,:)=P(i,:)/norm(P(i,:));
end
end
%開始訓練
while epoch>0
for j=1:6
%歸一化正向權值w
for i=1:18
w(i,:)=w(i,:)/norm(w(i,:));
s(i)=P(j,:)*w(i,:)';
end
%求輸出為最大的神經元,即獲勝神經元
temp=max(s);
for i=1:18
if temp==s(i)
count=i;
end
end
%將所有競爭層神經元的輸出置零
for i=1:18
s(i)=0;
end
%獲勝神經元的輸出置1
s(count)=1;
%權值調整
w(count,:)=w(count,:)+0.1*[P(j,:)-w(count,:)];
w(count,:)=w(count,:)/norm(w(count,:));
v(:,count)=v(:,count)+0.1*(T(j,:)'-T_out(j,:)');
%計算網絡輸出
T_out(j,:)=v(:,count)';
end
%訓練次數遞減
epoch=epoch-1;
end
%訓練結束
T_out
%網絡回想
%網絡的輸入模式Pc
Pc=[0.5 1;1 3];
%初始化Pc
for i=1:2
if Pc(i,:)==[0 0]
Pc(i,:)=Pc(i,:);
else
Pc(i,:)=Pc(i,:)/norm(Pc(i,:));
end
end
%網絡輸出
Outc=[0 0 0 0 0;0 0 0 0 0];
for j=1:2
for i=1:18
sc(i)=Pc(j,:)*w(i,:)';
end
tempc=max(sc);
for i=1:18
if tempc==sc(i)
countp=i;
end
sc(i)=0;
end
sc(countp)=1;
Outc(j,:)= v(:,countp)';
end
%回想結束
Outc
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -