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

📄 art_fang.m

📁 自适应共振理论网络 用来进行模式分类联想记忆效果很好
💻 M
字号:
%ART
%程序仅限有3种模式

%初始化
close all;
clear;
K=ones(7,7);%用于数据反位
x1=K-imread('1.bmp');%读入数据
x2=K-imread('2.bmp');
x3=K-imread('3.bmp');
x4=K-imread('4.bmp');
x5=K-imread('5.bmp');
N=49;
Num=zeros(5,N);
output=zeros(sqrt(N),sqrt(N));
for i=1:N
    Num(1,i)=x1(i);
end
for i=1:N
    Num(2,i)=x2(i);
end
for i=1:N
    Num(3,i)=x3(i);
end
for i=1:N
    Num(4,i)=x4(i);
end
for i=1:N
    Num(5,i)=x5(i);
end
mode_num=3;
b=1/(1+N)*ones(N,mode_num);
t=ones(mode_num,N);
rho=input('输入警戒系数(0~1):');
d_j=zeros(1,mode_num); %标记是是否参加竞选
Sj=zeros(1,mode_num);
n=0;  %记录试验的次数
x=input('输入模式编号(1,2,3,4,5):');    
while sum(Num(x,:))%用于等待输入
    compete_end=0;    
    d_j=zeros(1,mode_num);
    while compete_end==0
        for j=1:mode_num
            Sj(1,j)=Num(x,:)*b(:,j);
        end
        Sj_star=-1;
        j_star=-1;
        for j=1:mode_num
            if (Sj(1,j)>Sj_star)&(d_j(1,j)==0)
                Sj_star=Sj(1,j);
                j_star=j;
            end
        end
        if t(j_star,:)*Num(x,:)'/sum(Num(x,:))>rho    %训练 调整tij bij
            for i=1:N
                c(1,i)=t(j_star,i)*Num(x,i);
            end
            sum_c=sum(c);
            for i=1:N
                b(i,j_star)=c(1,i)/(0.5+sum_c);
                t(j_star,i)=c(1,i);
            end
            compete_end=1;%匹配
        else
            d_j(1,j_star)=1;  %不许参加竞争
        end
    end
    n=n+1;
    %以下用于显示输出结果
    subplot(5,4,4*(n-1)+1);
    for i=1:sqrt(N)
        for j=1:sqrt(N)
            output(i,j)=Num(x,(i-1)*sqrt(N)+j);
        end
    end
    imagesc(output');
    axis square;
    title('输入的图像')
    subplot(5,4,4*(n-1)+2);
    for i=1:sqrt(N)
        for j=1:sqrt(N)
            output(i,j)=t(1,(i-1)*sqrt(N)+j);
        end
    end
    imagesc(output');
    axis square;
    title('模式一')
    subplot(5,4,4*(n-1)+3);
    for i=1:sqrt(N)
        for j=1:sqrt(N)
            output(i,j)=t(2,(i-1)*sqrt(N)+j);
        end
    end
    imagesc(output');
    axis square;
    title('模式二')
    subplot(5,4,4*(n-1)+4);
    for i=1:sqrt(N)
        for j=1:sqrt(N)
            output(i,j)=t(3,(i-1)*sqrt(N)+j);
        end
    end
    imagesc(output');
    axis square;
    title('模式三')
    x=input('输入模式编号(1,2,3,4,5):');
   if n>4
       display('输入模式已满,请看输出图像')
       break;
   end
   

  
end

    
        
   

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -