Board logo

标题: bp神经网络及matlab实现 (4) [打印本页]

作者: yuyang911220    时间: 2016-8-8 09:57     标题: bp神经网络及matlab实现 (4)

(5)参数设置对神经网络性能的影响

       我在实验中通过调整隐含层节点数,选择不通过的激活函数,设定不同的学习率,


<1>隐含层节点个数

  隐含层节点的个数对于识别率的影响并不大,但是节点个数过多会增加运算量,使得训练较慢。


<2>激活函数的选择

       激活函数无论对于识别率或收敛速度都有显著的影响。在逼近高次曲线时,S形函数精度比线性函数要高得多,但计算量也要大得多。


<3>学习率的选择

       学习率影响着网络收敛的速度,以及网络能否收敛。学习率设置偏小可以保证网络收敛,但是收敛较慢。相反,学习率设置偏大则有可能使网络训练不收敛,影响识别效果。


3. 使用AForge.NET实现神经网络
(1) AForge.NET简介
       AForge.NET是一个C#实现的面向人工智能、计算机视觉等领域的开源架构。AForge.NET源代码下的Neuro目录包含一个神经网络的类库。
AForge.NET主页:http://www.aforgenet.com/
AForge.NET代码下载:http://code.google.com/p/aforge/
Aforge.Neuro工程的类图如下:

图10. AForge.Neuro类库类图


下面介绍图9中的几个基本的类:

Neuron — 神经元的抽象基类

Layer — 层的抽象基类,由多个神经元组成

Network —神经网络的抽象基类,由多个层(Layer)组成

IActivationFunction - 激活函数(activation function)的接口

IUnsupervisedLearning - 无导师学习(unsupervised learning)算法的接口ISupervisedLearning - 有导师学习(supervised learning)算法的接口


(2)使用Aforge建立BP神经网络
       使用AForge建立BP神经网络会用到下面的几个类:
<1>  SigmoidFunction : S形神经网络

  构造函数:public SigmoidFunction( double alpha )

   参数alpha决定S形函数的陡峭程度。

<2>  ActivationNetwork :神经网络类
  构造函数:

  public ActivationNetwork( IActivationFunction function, int inputsCount, params int[] neuronsCount )

                         : base( inputsCount, neuronsCount.Length )

  public virtual double[] Compute( double[] input )


参数意义:
inputsCount:输入个数
neuronsCount :表示各层神经元个数
<3>  BackPropagationLearning:BP学习算法
构造函数:

public BackPropagationLearning( ActivationNetwork network )

参数意义:

network :要训练的神经网络对象
BackPropagationLearning类需要用户设置的属性有下面2个:
learningRate :学习率
momentum :冲量因子
下面给出一个用AForge构建BP网络的代码。


// 创建一个多层神经网络,采用S形激活函数,各层分别有4,5,3个神经元
//(其中4是输入个数,3是输出个数,5是中间层结点个数)
ActivationNetwork network =
new ActivationNetwork(    new SigmoidFunction(2), 4, 5, 3);// 创建训练算法对象
BackPropagationLearning teacher =
newBackPropagationLearning(network);// 设置BP算法的学习率与冲量系数
teacher.LearningRate =
0.1;teacher.Momentum =
0;int iteration =
1 ; // 迭代训练500次
while( iteration <
500 ) {         teacher.RunEpoch( trainInput , trainOutput ) ;          ++iteration ;}//使用训练出来的神经网络来分类,t为输入数据向量
network.Compute(t)[0]





欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0