Hopfield神经网络的联想记忆——数字识别的一些笔记

菜鸟记录点自己参透的代码含义,如有不对,欢迎交流哈~~

  • 神经网络的运作过程

%% 清除环境变量
clear all
clc

%% 导入记忆模式
load data1.mat
T = array_one; 

%% 外积法计算权系数矩阵
[m,n] = size(T);
w = zeros(m);%初始矩阵为零
for i = 1:n
 w = w + T(:,i) * T(:,i)' - eye(m);%eye(m),返回m*m单位矩阵
end

设计网络的权系数矩阵的主要目的有:

(1)保证异步工作时系统的稳定性,即使它的权值对称

(2)保证所有要求记忆的稳定平衡点都收敛到自己

(3)使稳定点的吸引域尽可能的大

(4)使伪稳定点的个数尽可能的少。

 每个数字由10*10的矩阵表示,有数字的地方是1,空白部分用-1表示。

 

%% 导入待记忆模式,随机法带噪声数字点阵,小于0.2的部分,产生噪点,将数值变负。
noisy_array = T;
for i = 1:100
    a = rand;
    if a < 0.2
       noisy_array(i) = -T(i);
    end
end

%% 迭代计算
v0 = noisy_array;
v = zeros(m,n);%m*n全零矩阵
for k = 1:5
    for i = 1:m
        v(i,:) = sign(w(i,:)*v0);%返回一个大小相同,但数值等于-1,0,1
    end
    v0 = v;
end

%% 绘图
subplot(3,1,1)
t = imresize(T,20);%将图像放缩20倍
imshow(t)
title('标准')
subplot(3,1,2)
Noisy_array = imresize(noisy_array,20);
imshow(Noisy_array)
title('噪声')
subplot(3,1,3)
V = imresize(v,20);
imshow(V)
title('识别')
 

主脚本

%% 清空环境变量
clear all
clc

%% 数据导入
load data1 array_one
load data2 array_two

%% 训练样本(目标向量)
 T = [array_one;array_two]';
 
%% 用newhop函数简便地创建网络
 net = newhop(T);

%% 数字识别


% 多步仿真——元胞数组形式(单元阵列)
noisy_one = {(noisy_array_one)'};                    
identify_one = sim(net,{10,10},{},noisy_one);%10个向量仿真十次,测试向量为noisy_one;
identify_one{10}';%第十个,就是仿真最后一步的结果
noisy_two = {(noisy_array_two)'};
identify_two = sim(net,{10,10},{},noisy_two);
identify_two{10}';

%% 结果显示
Array_one = imresize(array_one,20);
subplot(3,2,1)
imshow(Array_one)
title('标准(数字1)') 
Array_two = imresize(array_two,20);
subplot(3,2,2)
imshow(Array_two)
title('标准(数字2)') 
subplot(3,2,3)
Noisy_array_one = imresize(noisy_array_one,20);
imshow(Noisy_array_one)
title('噪声(数字1)') 
subplot(3,2,4)
Noisy_array_two = imresize(noisy_array_two,20);
imshow(Noisy_array_two)
title('噪声(数字2)')
subplot(3,2,5)
imshow(imresize(identify_one{2}',20))
title('识别(数字1)')
subplot(3,2,6)
imshow(imresize(identify_two{2}',20))
title('识别(数字2)')
 

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值