⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 art_process.m

📁 ART2网络的MATLAB程序
💻 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 + -