• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

神经网络-感知器-matlab实现

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

1.基本原理

 

      神经网络里最简单的模型,就是感知器。感知器可以实现N维空间的线性划分。如二维空间,下图就是用一条直线将(0 0)分为一类,其余四点为一类。实现了与门。

      如果要将以上四点划分为(0 1)(1 0)为一类,(1 1)(0 0)为一类,显然是无法用直线将其分开。如果是三维空间,就是平面划分。如果N维,即超平面。

      下图为一个神经元模型,输入为pX1的向量,输出为a。感知器工作时,首要要学习,也就是对w和b进行调整。首先要有n个P向量,和一个你期望的该p向量得到的t值。w和b是不为0的随机值,训练的目的就是调整w和b的值,使e=t-a的值不断接近0。当所有样本输出的值都等于t时,学习结束。

     这是,给定相关值,你就可以得到你期望的结果。其中wp+b累加输出的值n,要经过一个函数,这个函数根据需要选取,并不一定要取阶跃函数。

 

     下图可以看出在二维空间了w和b分别是如何影响划分的直线的。

 

2.单层感知器

 

       以下图为感知器基本模型,摘自matlab的帮助文档。

上图有以下几个要点:

 

2.1 R为输入个数,S为单层神经元的个数。感知器里可以有s个神经元,但神经元之间无信息传递,之间互不影响。

2.2 输出是sX1的a向量,实现了对RX1的p向量的s次在R维空间的线性二划分。

 

综合以上分析,可以看出神经网络设计的重点:

 

2.1 如何将神经元相互联系起来,即网络的设计;

2.2 选择什么样的方法调整每个神经元的w和b值,该算法必须收敛,即在有限步骤内,让误差e趋近0;

2.3 每个神经元选择什么样的函数得到a输出;

 

3. 算法实现(matlab)

其中P为RXN输入矩阵,T为SXN的目标矩阵;

R为输入个数,N为训练的样本数;

S为神经元个数;

repeat为最大迭代次数;W b e为经过训练得到的W b e;如果线性可分的话,并在repeat步类收敛,e就是0。

 

   1:  function [W b e] = perceptron(P, T, repeat)
   2:  switch nargin
   3:      case 0
   4:      case 1
   5:          error(\'Must enter P and T\');
   6:      case 2    
   7:          repeat = 10000;
   8:  end
   9:  [r n]=size(P);
  10:  s =size(T,1);
  11:  W=ones(s,r);
  12:  b=ones(s,1);
  13:  e=ones(s,n);
  14:  for i=1:repeat
  15:      index=mod(i,n); 
  16:      if(index == 0)
  17:          index = 4;
  18:      end
  19:      p=P(:,index);
  20:      t=T(:,index);
  21:      a= W*p + b;
  22:      for j=1:s
  23:          if a(j) >= 0
  24:              a(j) = 1;
  25:          else
  26:              a(j) = 0;
  27:          end
  28:      end
  29:      %e:s by n
  30:      e(:,index)=(t-a)*0.5;
  31:      W=W+e(:,index)*p\';
  32:      b=b+e(:,index);
  33:      if(e == 0)
  34:          break;
  35:      end
  36:  end
  37:  end
 
     这里需要说明一下w和b是如何调整的,即31行。新的权重值为旧的加上误差值乘以输入,思想很简单。即用误差调整w和b,显然误差为0,就无调整。不为0,就朝着使误差减小的方向调整,即负反馈的思想。乘以输入,是对调整的修正,使调整更加迅速。可以设想,如果一个输入非常小,一个非常大,那输入小的增量也要小,大的增量也要大。如果都大,那就容易产生震荡。如果小,收敛就很慢,需要学习的时间就会变得很长。
 
 

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Delphi10.3的DBGrid中memo类型显示内容而不是(WIDEMEMO)发布时间:2022-07-18
下一篇:
网络IO模型-异步选择模型(Delphi版)发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap