这个真心不错,有sim函数的介绍,连我借的图书馆的书上介绍的都很少,只知道粘程序。。。
转自http://www.matlabsky.com/thread-9234-1-1.html
Hopfield网络及学习算法最初是由美国物理学家J.J Hopfield于1982年首先提出的,曾经为人工神经网络的发展进程开辟了新的研究途径。它利用与阶层型神经网络不同的结构特征和学习方法,模拟生物神经网络的记忆机理,获得了令人满意的结果。
Hopfield最早提出的网络是二值神经网络,神经元的输出只取1和0,所以,也称离散Hopfield神经网络(Discrete
Hopfield Neural Network,DHNN)。在离散Hopfield网络中,所采用的神经元是二值神经元,因此,所输出的离散值1和0分别表示神经元处于激活和抑制状 态。
离散型Hopfield神经网络的结构如下图所示。

从DHNN的结构可以看出:它是一种多输入、含有阈值的二值非线性动态系统。在动态系统中,平衡稳定状态可以理解为系统某种形式的能量函数在系统运动过程
中,其能量值不断减小,最后处于最小值。Coben和Grossberg在1983年给出了关于Hopfield网络稳定的充分条件,他们指出:如果 Hopfield网络的权系数矩阵是一个对称矩阵,并且对角线元素为0,则这个网络是稳定的。应该指出,这只是Hopfield网络稳定的充分条件,而不 是必要条件。在实际中有很多稳定的Hopfield网络,但是它们并不满足权系数矩阵 是对称矩阵这一条件。
第二部分 工具箱讲解
Hopfield神经网络工具箱主要包括newhop和sim函数。
1 newhop
函数功能:创建一个离散型Hopfield网络。
调用格式:net=newhop(T);
T:具有Q个目标向量的R*Q矩阵(元素必须为-1或1);
net:生成的神经网络,具有在T中的向量上稳定的点。
2 sim
函数功能:对训练好的神经网络进行仿真。
调用格式:[Y,Af,E,perf] = sim(net,P,Ai,T)
[Y,Af,E,perf]
= sim(net,{Q TS},Ai,T)
P,Q:测试向量的个数;
Ai:初始的层延时,默认为0;
T:测试向量;
TS:测试的步数;
Y:网络的输出矢量;
Af:训练终止时的层延迟状态;
E:误差矢量;
perf:网络的性能。
说明:函数中用到的参数采取了两种不同的形式进行表示:矩阵和元胞数组。矩阵的形式只用于仿真的时间步长TS=1的场合,元胞数组形式常用于一些没有输入信号的神经网络。
第三部分 程序示范
转自http://www.matlabsky.com/thread-9234-1-1.html
Hopfield网络及学习算法最初是由美国物理学家J.J Hopfield于1982年首先提出的,曾经为人工神经网络的发展进程开辟了新的研究途径。它利用与阶层型神经网络不同的结构特征和学习方法,模拟生物神经网络的记忆机理,获得了令人满意的结果。

第二部分 工具箱讲解
Hopfield神经网络工具箱主要包括newhop和sim函数。
1 newhop
函数功能:创建一个离散型Hopfield网络。
调用格式:net=newhop(T);
T:具有Q个目标向量的R*Q矩阵(元素必须为-1或1);
net:生成的神经网络,具有在T中的向量上稳定的点。
2 sim
函数功能:对训练好的神经网络进行仿真。
调用格式:[Y,Af,E,perf] = sim(net,P,Ai,T)
P,Q:测试向量的个数;
Ai:初始的层延时,默认为0;
T:测试向量;
TS:测试的步数;
Y:网络的输出矢量;
Af:训练终止时的层延迟状态;
E:误差矢量;
perf:网络的性能。
说明:函数中用到的参数采取了两种不同的形式进行表示:矩阵和元胞数组。矩阵的形式只用于仿真的时间步长TS=1的场合,元胞数组形式常用于一些没有输入信号的神经网络。
第三部分 程序示范
-
% ------------------------------number array---------------------------------
-
one=[-1 -1 -1 -1 -1 -1 -1 -1 -1 -1;...
-
-1 -1 -1 -1 1 1 -1 -1 -1 -1;-1 -1 -1 -1 1 1 -1 -1 -1 -1;...
-
-1 -1 -1 -1 1 1 -1 -1 -1 -1;-1 -1 -1 -1 1 1 -1 -1 -1 -1;...
-
-1 -1 -1 -1 1 1 -1 -1 -1 -1;-1 -1 -1 -1 1 1 -1 -1 -1 -1;...
-
-1 -1 -1 -1 1 1 -1 -1 -1 -1;-1 -1 -1 -1 1 1 -1 -1 -1 -1;...
-
-1 -1 -1 -1 1 1 -1 -1 -1 -1;-1 -1 -1 -1 1 1 -1 -1 -1 -1;...
-
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1];
-
two=[-1 -1 -1 -1 -1 -1 -1 -1 -1 -1;...
-
-1 1 1 1 1 1 1 1 1 -1;-1 1 1 1 1 1 1 1 1 -1;...
-
-1 -1 -1 -1 -1 -1 -1 1 1 -1;-1 -1 -1 -1 -1 -1 -1 1 1 -1;...
-
-1 1 1 1 1 1 1 1 1 -1;-1 1 1 1 1 1 1 1 1 -1;...
-
-1 1 1 -1 -1 -1 -1 -1 -1 -1;-1 1 1 -1 -1 -1 -1 -1 -1 -1;...
-
-1 1 1 1 1 1 1 1 1 -1;-1 1 1 1 1 1 1 1 1 -1;...
-
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1];
-
%
--------------------------plot standard number figure--------------
-
subplot(2,3,1)
-
imshow(imresize(one,20))
-
title('standard number')
-
-
subplot(2,3,4)
-
imshow(imresize(two,20))
-
title('standard number')
-
% ---------------------------creat hopfield net---------------------
-
T=[one;two]';
-
net=newhop(T);
-
% --------------------------generate rand noise------------------
-
for i=2:11
-
for j=2:9
-
a=rand;
-
if a<=0.1
-
one(i,j)=-one(i,j);
-
two(i,j)=-two(i,j);
-
end
-
end
-
end
-
noise_one=one
-
noise_two=two
-
% -------------------------plot noise figure----------------------------
-
subplot(2,3,2)
-
imshow(imresize(noise_one,20))
-
title('noise number')
-
-
subplot(2,3,5)
-
imshow(imresize(noise_two,20))
-
title('noise number')
-
% ------------------------plot identify figure---------------------------
-
noise1={(noise_one)'};
-
tu1=sim(net,{12,3},{},noise1);
-
tu1{3}'
-
subplot(2,3,3)
-
imshow(imresize(tu1{3}',20))
-
title('identify number')
-
-
noise2={(noise_two)'};
-
tu2=sim(net,{12,3},{},noise2);
-
tu2{3}'
-
subplot(2,3,6)
-
imshow(imresize(tu2{3}',20))
- title('identify number')