菜鸟记录点自己参透的代码含义,如有不对,欢迎交流哈~~
- 神经网络的运作过程
%% 清除环境变量
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)')