📄 cpns.m
字号:
% clear;clc;
% I=[0 0;0.5 0.5;0 0.5;1 3;0.5 1;1 0.5];
% O=[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];
% B=0.01;
function [w,v]=cpns(I,O,B)
[M,N]=size(I);
[P,Q]=size(O);
In_Num=N;
Out_Num=Q;
com_Num=Out_Num+1000;
w=rands(com_Num,In_Num)/2+0.5;
v=rands(Out_Num,com_Num)/2+0.5;
Out=rands(P,Q)/2+0.5; %实际输出
Ber=1; %误码率
alfa=0.85; %学习率
%归一化输入向量I
for i=1:M
t=norm(I(i,:));
if t~=0
I(i,:)=I(i,:)/t;
end
end
%开始训练
while Ber>B
for j=1:M
%归一化正向权值
for i=1:com_Num
w(i,:)=w(i,:)/norm(w(i,:));
s(i)=I(j,:)*w(i,:)';
end
%求获胜神经元
temp=max(s);
for i=1:com_Num
if temp==s(i)
count=i;
end
end
%将所有竞争层神经元的输入置0
for i=1:18
s(i)=0;
end
%将获胜神经元的输出置1
s(count)=1;
%权值调整
w(count,:)=w(count,:)+alfa*(I(j,:)-w(count,:));
w(count,:)=w(count,:)/norm(w(count,:));
v(:,count)=v(:,count)+alfa*(O(j,:)'-Out(j,:)');
%计算网络的输出
Out(j,:)=v(:,count)';
end
Ber=sum(sum(abs(Out-O)));
alfa=alfa*exp(-0.0025);
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -