初探BP神经网络工具箱

      初探BP神经网络工具箱  

      BP神经网络(Back Propagation)是一种按误差逆传播算法的多层前馈网络,目前在实际应用中8成到9成的神经网络模型采用的是BP网络(或者它的变种)。中间层可以为单隐层或者多隐层。由最后一个隐层传递到输出层。向输出层向外界输出信息处理结果。当实际输出与期望值不相符时,我们就进入误差的反向传播(Back Propagation)阶段。误差通过输出层向隐层和输入层反向传回去,按梯度下降的方式修改各层的权值。不断周而复始这个循环(这也是神经网络学习训练的过程),直到输出层与期望输出的误差减少到目标范围内(比如0.01),或者循环次数达到了预设值(比如500),则参数学习过程停止。这也就是BP神经网络的大致工作原理了。

      众所周知,matlab是一款很优秀的处理神经网络的数学软件,它里面自带的一些库和包可以帮助我们很方便的创建神经网络。在Matlab神经网络工具箱中提供了大量的与BP神经网络相关的函数。本文我就介绍一下BP神经网络相关的一些函数的操作和使用。

    一. 创建函数

        创建函数有2种方式,一种是newcf, 另一种是newff。我们先来看看newcf。

     1)newcf

       newcf是用来创建级联前向BP网络函数的,何谓级联呢?在这个例子里的解释很简单,简单地说,就是input连接着第一个隐层又同时连接着第二个隐藏,这就是级联。我这么说可能有点抽象,待会我会截张图大家就能看个明白。

net = newcf ( inputRange, [lay1, lay2,...,layN], {layTran1, layTran2,...,layTranN}, BPTrain, BPLearn, util)

        以上便是newcf调用的格式,

        第一个参数inputRange是个矩阵,代表没组输入的最大值和最小值

        第二个参数是代表每个隐层的长度,一个N个隐层

        第三个参数代表各层的传递函数,默认是tansig

        第四个参数代表BP网络的训练函数,默认是trainlm

        第五个参数是权值的学习算法,默认是learngdm

        第六个参数是性能函数,默认是mse

        注意一下,我们调用的时候不需要全部调用,有默认值的参数可以省略,比如util这个参数可以省略掉。

举个简单的例子把,大家看看下面这段程序:

clear all;
input = [8 7 6 5 4 3 2 1 0];			  %输入
expect = [0 1 2 3 4 5 6 7 8];			  %期望输出
net = newcf([0 8], [5,1], {'tansig', 'purelin'}); %创建网络
net = train(net, input, expect);		  %训练网络

以上代码产生的神经网络如下所示,这也就是我刚刚提到的级联,从图中一目了然可以看到级联的定义。

初探BP神经网络工具箱_第1张图片

       后我们使用这个神经网络,输入之前同样的input进行模拟,发现输出值跟我们的期望值完全一样(当然这是建立在参数很少很简单的前提下),得到了很好的模拟效果。如下图所示:

初探BP神经网络工具箱_第2张图片


     2)newff

       newff用来创建前向非级联的神经网络,函数格式见下:
       net = newff ( in, target, hiddenLay, tranFun, trainFun, learnFun, util, inProcess, outProcess,DDF)
       第一个参数in代表输入矩阵
       第二个参数代表目标输出矩阵
       第三个参数是隐层节点数目
       hiddenLay代表节点传递函数
       第五个参数是训练函数
       第六个参数是学习函数
       第七个参数是性能分析函数
       第八个参数是输入处理函数
       第九个参数是输出处理函数
       第十个参数是验证数据划分函数
       一般来说后面4个参数省略,使用系统默认参数。


    二. 传递函数

      1)logsig函数

            logsig就是我们常说的S函数。
        废话不多说,大家直接看下面的程序,一目了然。
x = -10:0.2:10;
y = logsig(x);
plot(x,y); grid on
            函数图像如下所示:
初探BP神经网络工具箱_第3张图片

      2)tansig函数

            tansig是双曲正切函数,它的值域是(-1,1)

         函数图像如下所示,注意区分它和S函数的区别


初探BP神经网络工具箱_第4张图片

   三. 学习函数

      1)learngd函数

      该函数用来实现BP的梯度下降学习,主要用来计算权值或者阀值的变化率

      2)learngdm函数

        这是梯度下降动量函数,用来计算权值或者阀值的变化率,主要用到了动量这个概念。

   四. 训练函数

        1)trainbfg函数

        该函数是准牛顿BP算法函数,可以训练任意形式的神经网络。很好很强大,强烈推荐使用。

   2)traingd函数

        这是梯度下降BP算法函数

         3)traingdm函数

         这是梯度下降动量BP算法函数

         4)traingdx函数

         利用快速BP算法训练前向神经网络


   五. 显示函数

        1)plotperf函数

         用于绘制一个单独神经元的误差曲面,格式:plotes( WV, BV, ES, V)
         WV是权值的N维矩阵;BV是M维的阀值行向量;ES为误差向量组成的M*N阶矩阵;V是视角

        2)errsurf函数

          用于计算单个神经元的误差曲面,格式:plotes( P, T, WV, BV, F)
         P是输入行向量,T是目标行向量,WV是权值列向量;BV是阀值列向量;F是传递函数的名字
神经元的误差曲面是由权值和阀值的行向量确定的。
   
        我们通过一个简单的例子来看看。
p = [6 4];
t = [1.4 1.8];
wv = -8:0.8:8; bv = wv;
ES = errsurf(p, t, wv, bv, 'logsig');
plotes(wv, bv, ES, [60 30])

得到的绘图如下所示:


初探BP神经网络工具箱_第5张图片

好了,至此我们已经入门了matlab的BP神经网络的基本操作,以后我们就能利用这些工具做更加高级的工作了。


你可能感兴趣的:(Machine,Learning)