📄 art_process.m
字号:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% ART2网络函数调用说明
% 2007年3月 长沙理工大学电气与信息工程学院 陈众 Email: chenzhong74@126.com
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% 输入: Input ------ 待学习向量
% NumNeurons ------ F2层神经元个数
% a, b ,c ,d ------ ART2网络参数 (详见原始论文)
% WF1_F2 ------ F1到F2层连接矩阵
% WF2_F1 ------ F2到F1层连接矩阵
% rho ------ 警戒值
% theta,e ------ ART2网络参数 (详见原始论文)
% 输出: u ------ 用于WF1_F2,WF2_F1的学习(详见原始论文)
% J ------ 本次训练胜出的神经元编号
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 使用说明: 在一个M文件中初始化NumNeurons,a,b,c,d,
% WF1_F2,WF2_F1,rho,theta,e等值,将输入向量放入Iput ,
% 调用ART_Process,将返回的u,J用于WF1_F2,WF2_F1的学习,学习算法可以自行选择
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function [u,p,J]=ART_Process(Input, NumNeurons,a,b,c,d,WF1_F2,WF2_F1, rho,theta,e)
y = zeros(NumNeurons,1); %y初始为0
Counter=1;
F2_feedback=0;
m=length(Input);
I=double(Input);
while Counter>0
[u,p]=Schema_ART2_F1(I,F2_feedback,a,b,theta,e,m,NumNeurons); %F1层稳定
for k = 1:NumNeurons
if y(k) ~= -1 %-1代表被抑制
y(k)=WF1_F2(k,:) * p' ; %获取没有被抑制的神经元输出
end
end
[maxV, J] = max(y); %未被抑制神经元中输出y中最大元素胜出,记录为J
if maxV==-1
error('分类数目已经超过最大神经元数目');
end
F2_feedback=d * WF2_F1(:,J)';
p=u+F2_feedback; %F2层开始返回,
%在F1再次稳定前,
r =( u + c * p) / (e + norm(u,2) + c * norm(p,2)); %计算u与p的重合度,第一次显然重合,因为d * Wt(:,J)' =0
R = norm(r,2);
if R < (rho - e) %判断是否重置,匹配度不够的话
y(J) = -1; %如果是,把y(j)置为-1,排除该神经元
Counter=1; %被判断为抑制,那么Counter应该重新设置为1
else
if Counter==1
Counter=Counter+1; %第一轮的学习算是通过了,但是还要校验一次
else %要进到这里以下,必须有Counter==2
%WF2_F1(:,J) = (u/(1-d))' ; %快速学习??
%WF1_F2(J,:) = u/(1-d); %在外部进行学习,返回u
Counter=0; %退出本轮学习
end
end
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -