神经网络系列讲解之离散型Hopfield网络

这个真心不错,有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的场合,元胞数组形式常用于一些没有输入信号的神经网络。

第三部分 程序示范
  1. % ------------------------------number array---------------------------------
  2. one=[-1 -1 -1 -1 -1 -1 -1 -1 -1 -1;...
  3.      -1 -1 -1 -1 1 1 -1 -1 -1 -1;-1 -1 -1 -1 1 1 -1 -1 -1 -1;...
  4.      -1 -1 -1 -1 1 1 -1 -1 -1 -1;-1 -1 -1 -1 1 1 -1 -1 -1 -1;...
  5.      -1 -1 -1 -1 1 1 -1 -1 -1 -1;-1 -1 -1 -1 1 1 -1 -1 -1 -1;...
  6.      -1 -1 -1 -1 1 1 -1 -1 -1 -1;-1 -1 -1 -1 1 1 -1 -1 -1 -1;...
  7.      -1 -1 -1 -1 1 1 -1 -1 -1 -1;-1 -1 -1 -1 1 1 -1 -1 -1 -1;...
  8.      -1 -1 -1 -1 -1 -1 -1 -1 -1 -1];
  9. two=[-1 -1 -1 -1 -1 -1 -1 -1 -1 -1;...
  10.      -1 1 1 1 1 1 1 1 1 -1;-1 1 1 1 1 1 1 1 1 -1;...
  11.      -1 -1 -1 -1 -1 -1 -1 1 1 -1;-1 -1 -1 -1 -1 -1 -1 1 1 -1;...
  12.      -1 1 1 1 1 1 1 1 1 -1;-1 1 1 1 1 1 1 1 1 -1;...
  13.      -1 1 1 -1 -1 -1 -1 -1 -1 -1;-1 1 1 -1 -1 -1 -1 -1 -1 -1;...
  14.      -1 1 1 1 1 1 1 1 1 -1;-1 1 1 1 1 1 1 1 1 -1;...
  15.      -1 -1 -1 -1 -1 -1 -1 -1 -1 -1];
  16. %  --------------------------plot standard number figure--------------
  17. subplot(2,3,1)
  18. imshow(imresize(one,20))
  19. title('standard number')

  20. subplot(2,3,4)
  21. imshow(imresize(two,20))
  22. title('standard number')
  23. % ---------------------------creat hopfield net---------------------
  24. T=[one;two]';
  25. net=newhop(T);
  26. % --------------------------generate rand noise------------------
  27. for i=2:11
  28.     for j=2:9
  29.         a=rand;
  30.         if a<=0.1
  31.            one(i,j)=-one(i,j);
  32.            two(i,j)=-two(i,j);
  33.         end
  34.     end
  35. end
  36. noise_one=one
  37. noise_two=two
  38. % -------------------------plot noise figure----------------------------
  39. subplot(2,3,2)
  40. imshow(imresize(noise_one,20))
  41. title('noise number')

  42. subplot(2,3,5)
  43. imshow(imresize(noise_two,20))
  44. title('noise number')
  45. % ------------------------plot identify figure---------------------------
  46. noise1={(noise_one)'};
  47. tu1=sim(net,{12,3},{},noise1);
  48. tu1{3}'
  49. subplot(2,3,3)
  50. imshow(imresize(tu1{3}',20))
  51. title('identify number')

  52. noise2={(noise_two)'};
  53. tu2=sim(net,{12,3},{},noise2);
  54. tu2{3}'
  55. subplot(2,3,6)
  56. imshow(imresize(tu2{3}',20))
  57. title('identify number')

你可能感兴趣的:(算法)