hopfield_net.m

来自「对于含有噪声的的数字图像模式“1、2、3、4”」· M 代码 · 共 104 行

M
104
字号
% =========== define input pattern ============
m=12;
n=10;

num1=  [-1 -1 -1 -1 1 1 -1 -1 -1 -1;
        -1 -1 -1 1 1  1 -1 -1 -1 -1;
        -1 -1 1 1 1 1 -1 -1 -1 -1;
        -1 -1 -1 -1 1 1 -1 -1 -1 -1;
        -1 -1 -1 -1 1 1 -1 -1 -1 -1;
        -1 -1 -1 -1 1 1 -1 -1 -1 -1;
        -1 -1 -1 -1 1 1 -1 -1 -1 -1;
        -1 -1 -1 -1 1 1 -1 -1 -1 -1;
        -1 -1 -1 -1 1 1 -1 -1 -1 -1;
        -1 -1 -1 -1 1 1 -1 -1 -1 -1;
        -1 -1 -1 -1 1 1 -1 -1 -1 -1;
        -1 -1 1 1 1 1 1 1 -1 -1];

num2=  [-1 -1 -1 -1 1 1 1 -1 -1 -1; 
        -1 -1 1 1 1 1 1 1 -1 -1;
        -1 1 1 -1 -1 -1 -1 1 1 -1;
        -1 1 -1 -1 -1 -1 -1 -1 1 1;
        1 -1 -1 -1 -1 -1 -1 1 1 -1;
        -1 -1 -1 -1 -1 -1 1 1 -1 -1;
        -1 -1 -1 -1 -1 1 1 -1 -1 -1;
        -1 -1 -1 -1 1 1 -1 -1 -1 -1;
        -1 -1 -1 1 1 -1 -1 -1 -1 -1;
        -1 -1 1 1 -1 -1 -1 -1 -1 -1;
        -1 1 1 -1 -1 -1 -1 -1 -1 -1;
        1 1 1 1 1 1 1 1 1 1];

num3=  [-1 1 1 1 1 1 1 1 1 -1;
        -1 -1 -1 -1 -1 -1 -1 -1 1 -1;
        -1 -1 -1 -1 -1 -1 1 1 -1 -1;
        -1 -1 -1 -1 1 1 -1 -1 -1 -1;
        -1 -1 1 1 -1 -1 -1 -1 -1 -1;
        1 1 1 1 1 1 1 1 -1 -1;
        -1 -1 -1 -1 -1 -1 -1 -1 1 -1;
        -1 -1 -1 -1 -1 -1 -1 -1 -1 1;
        -1 -1 -1 -1 -1 -1 -1 -1 1 -1;
        1 -1 -1 -1 -1 -1 -1 -1 1 -1;
        -1 1 -1 -1 -1 -1 -1 1 -1 -1;
        -1 -1 1 1 1 1 1 -1 -1 -1];

num4=  [-1 -1 -1 -1 -1 1 1 1 -1 -1;
        -1 -1 -1 -1 1 1 1 1 -1 -1;
        -1 -1 -1 1 1 -1 1 1 -1 -1;
        -1 -1 -1 1 1 -1 1 1 -1 -1;
        -1 -1 1 1 -1 -1 1 1 -1 -1;
        -1 -1 1 1 -1 -1 1 1 -1 -1;
        -1 1 1 -1 -1 -1 1 1 -1 -1;
        1 1 -1 -1 -1 -1 1 1 -1 -1;
        1 1 1 1 1 1 1 1 1 1;
        1 1 1 1 1 1 1 1 1 1;
        -1 -1 -1 -1 -1 -1 1 1 -1 -1;
        -1 -1 -1 -1 -1 -1 1 1 -1 -1];


num_tab = cat(3,num1,num2,num3,num4);
vector_tab=[];

for i=1:size(num_tab,3)
   % pattern_plot(num_tab(:,:,i),m,n,i);
    vector_tab=cat(1,vector_tab,matrix2vector(num_tab(:,:,i)));
end

% ============= design hopfield net ================
net_unit=m*n;    % number of unit in net must be more than 4*7 = 28
w=zeros(m*n,m*n);
for i=1:size(vector_tab,1)
    vector=vector_tab(i,:);
    w=w+vector'*vector;
end
for i=1:m*n
    w(i,i)=0;
end

%============== noisy ==========================
noise=input('please input noise volumn(between 0 and 1):\n');
  if ~(noise<1 & noise>0)
      error('noise exceeds the limitation! ');
  end
  noise=round(noise*m*n);
  vector_tab = noisy(vector_tab,noise);

% ============= association process ================
for i=1:size(vector_tab,1)
    vector=vector_tab(i,:);
    flag=1;
    sum=0;
    while (flag==1 & sum<5000)
        sum=sum+1;
        flag=0;
        for j=1:size(vector,2)
            a=sign(w(j,:)*vector');
            if a~=vector(j)
                flag=1;
                vector(j)=a;
            end
        end
    end
    result=(reshape(vector,n,m))';
    pattern_plot(result,m,n,i+size(vector_tab,1));
end
% ==================================================

⌨️ 快捷键说明

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