Matlab神经网络_2

上传人:飞*** 文档编号:48594884 上传时间:2018-07-17 格式:PPT 页数:50 大小:795KB
返回 下载 相关 举报
Matlab神经网络_2_第1页
第1页 / 共50页
Matlab神经网络_2_第2页
第2页 / 共50页
Matlab神经网络_2_第3页
第3页 / 共50页
Matlab神经网络_2_第4页
第4页 / 共50页
Matlab神经网络_2_第5页
第5页 / 共50页
点击查看更多>>
资源描述

《Matlab神经网络_2》由会员分享,可在线阅读,更多相关《Matlab神经网络_2(50页珍藏版)》请在金锄头文库上搜索。

1、3. BP网络 (Back Propagation network)BP网络是一种多层前馈型神经网络,其神经元的传递函数 多半是S型函数,输出量多为0到1之间的连续量,它可以实现从 输入到输出的任意非线性映射。由于权值的调整采用反向传播 (Back Propagation)学习算法,因此也常称其为BP网络。目前,在人工神经网络的应用中,绝大部分的神经网络模型 都采用BP网络及其变化形式。它也是前向网络的核心部分,体 现了人工神经网络的精华。BP网络主要用于以下四方面:u 函数逼近:用输入矢量和相应的输出矢量训练一个网络以 逼近一个函数。u 模式识别:用一个待定的输出将它与输入联系起来。u 分类

2、:把输入矢量所定义的合适方式进行分类。u 数据压缩:减少输出矢量维数以便于传输或存储。本部分在介绍BP网络的基本结构基础上,着重讨论用 MATLAB创建网络、训练以及网络仿真等诸多方面的方法,最 后给出BP网络应用的几个实例。 3.1 BP神经网络模型结构 BP神经元模型 神经 元传 递函 数 上图给出一个基本的BP神经元模型,它具有R个输入,每 个输入都通过一个适当的权值w和上一层相连,网络输出可表示 为: a=f (w*p+b) f就是表示输入/输出关系的传递函数。BP网络中隐层神经元的 传递函数通常用log-sigmoid型函数logsig()、tan-sigmoid型函数 tansig

3、()以及纯线性函数purelin()。如果BP网络的最后一层是sigmoid型神经元,那么整个网 络的输出就限制在一个较小的范围内;如果BP网络的最后一层 是purelin型线性神经元,那么整个网络的输出可以取任意值。 下图(上半部) 是一个典型的BP网络结构。具有S个神经元, R个输入和S个输出,神经元采用S型传递函数logsig() 。可见, 就单层网络而言,除传递函数不同外,与前面所介绍的感知器 和线性神经网络没有什么不同。上图(下半部) 是一个典型两层BP网络 (一个隐层和一个输出 层)。前馈型网络通常有一个或多个隐层,隐层中的神经元均采 用S型传递函数,输出层的神经采用线性传递函数。

4、隐层的非线 性传递函数神经元可以学习输入输出之间的线性和非线性关系 ,线性输出层是为了拓宽网络输出。如果需要限定网络输出(例 如约束在0和1之间),则可以采用S型传递函数(例如logsig()。 训练神经网络之前需要构造一个网络构架,函数newff()就用 于构造BP神经网络。它需要四个输入条件,依次是:由R维的 输入样本最大最小值构成的Rx2维矩阵、各层的神经元个数、各 层神经元的传递函数以及训练用函数的名称。例如: net=newff(-1 2; 0 5, 3,1, tansig, purelin, traingd); 就生成了初始化待训练的神经网络。 3.2 生成网络 3.4 网络仿真

5、给定网络结构和输入变量p,就可以应用sim()函数计算相应 的网络输出a。 举例: net=newff(-1 2; 0 5, 3,1, tansig, purelin, traingd); net=init(net); p=1;2; a=sim(net,p) a=0.3467 3.3 权值和阈值的初始化 前馈型神经网络在训练之前必须要对权值和阈值进行初始化 ,newff()函数可以自动完成这一过程,但是无法重新赋初值。 如果想重新初始化,可以应用init()函数,使网络恢复到初始化 的情况。 p=1 2 3; 2 4 1; a=sim(net, p) a=0.3467 0.9705 0.603

6、03.5 BP网络的训练上例演示了对应一维和多维输如情况下的仿真 (可能每次结 果不同,这是因为前面初始化的网络是随机的,对应的网络不 同,结果自然不同)。 BP神经网络的训练函数有traingd、traingdm、traingdx、 trainrp、traincgf、traincgp、traincgb、trainscg、trainbfg、 trainoss、trainlm、trainbr等,每种训练函数各有特点,但是没 有一种函数能适应所有情况下的训练过程。使用者应根据各自 所研究的任务不同,选择合适的训练方法和函数,满足各自不 同的课题。无论是函数逼近还是模式识别,都必须对神经网络进行训练

7、。 训练之前首先需要样本,样本中包含输入向量P以及相应的期望 输出向量T,训练过程中应不断调整权值和阈值,使得神经网络 的表现函数达到最小。前馈型神经网络的表现函数缺省为网络 输出a和期望输出向量T的均方差mse。下面,将各种函数所对应 的方法一并归类如下: 梯度下降法:traingd(); 改进BP算法1 (启发式学习算法): 有动量的梯度下降法:traingdm(); 有自适应学习率的梯度下降法:traingda(); 有动量和自适应学习率的梯度下降法: traingdx(); 能复位的BP算法: trainrp(); 改进BP算法2 (基于数值最优化理论的训练算法): 共轭梯度法: tr

8、aincgf()、traincgp()、traincgb()、 trainscg(); 高斯-牛顿法: trainoss(); levenberg-Marquardt法: trainlm();3.6 BP网络的相关讨论u 在BP网络的训练中,训练方法的选择是非常重要的。对于简 单问题,可选择梯度下降法traingd(),但由于训练中稳定性要求 学习率很小,所以梯度下降法使得训练很慢。动量法因为学习 率的提高通常比单纯的梯度下降法要快,但在实际应用中还是 很慢,这两种方法通常只应用于递增训练。如果内存足够,对 于中小型网络,可以采用Levenberg-Marqardt训练方法;如果内 存空间有限

9、的情况下,可以采用其他收敛速度较快的算法。对 于大型网络,就要采用其他训练函数,例如trainscg()或者 trainrp()。 u 多层神经网络可以应用于线性系统和非线性系统中,对任意 函数模拟逼近(当然,感知器和线性神经网络也有可能解决这 类网络问题)。虽然理论上是可行的,但实际上BP网络并不一 定总能有解。u 对于非线性系统,选择合适的学习率是一个很重要的问题。 在线性网络中,学习率过大会导致训练过程不稳定。相反,学 习率过小又会造成训练时间过长。和线性网络不同,对于非线 性多层网络很难选择很好的学习率。对那些快速训练算法,缺 省参数值基本上都是最有效的设置。 u 非线性网络的误差面比

10、线性网络的误差面复杂得多,问题在 于多层网络中非线性传递函数有着多个局部最优解。寻优的过 程与初始点的选取关系很大,初始点如果更靠近局部最优点, 而不是全局最优点,就不会得到正确结果,这也是多层网络无 法得到最优解的一个原因。为了解决这个问题,在实际训练过 程中,应重复选取多个初始点进行训练,以保证训练结果的全 局最优性。 u 网络隐层神经元的数目也对网络有一定的影响。神经元数目 太少会造成网络的不适性,而神经元数目太多又会引起网络的 过适性。 3.7 应用举例1). 问题提出 要求设计一个简单的BP网络,实现对非线性函数的逼近。通 过改变该函数的参数以及BP网络隐层神经元的数目,来观察训 练

11、时间以及训练误差的变化情况。将要逼近的非线性函数设为 正弦函数,其频率参数k可以调节: 3.7.1 非线性函数逼近k=1;% 先令频率参数为1 n=10; % 隐层神经元数目n=10 aim=0.01;% 逼近误差 % 产生频率可调的正弦波作为要逼近的非线性函数 p=-1:0.05:1; t=sin(k*pi*p); plot(p,t); title(要逼近的非线性函数); xlabel(时间);xlabel(时间); ylabel(非线性函数);2). 网络建立应用函数newff()建立BP网络结构,为二层BP神经网络。隐 层神经元数目n可以改变,暂设为n=10,输出层有一个神经元 。选择隐

12、层和输出层神经元传递函数分别为tansig函数和purelin 函数,网络训练用算法采用Levenberg-Marquardt算法trainlm。 net=newff(minmax(p),n,1,tansig purelin,trainlm); y1=sim(net,p); plot(p,t,p,y1,-); title(未训练的网络输出结果); xlabel(时间); ylabel(仿真输出- 原函数);绘制网络输出曲线,并与原函数相比较,结果如下页图所示。 因为使用newff()函数建立网络时,权值和阈值的初始化是随 机的,所以网络输出结果很差,根本达不到函数逼近的目的, 并且每次运行的结

13、果也有所不同。 3). 网络训练应用函数train()对网络进行训练之前,需要预先设置训练参 数。将训练次数设置为50,训练精度设置为0.01,其余参数使用 缺省值。训练后得到的误差变化过程如下页图所示。net.trainParam.epochs = 50; % 训练次数设置为50 net.trainParam.goal =aim;% 训练精度设置为0.01 net= train(net,p,t); % 训练TRAINLM, Epoch 0/50, MSE 14.2629/0.01, Gradient 325.276/1e-010 TRAINLM, Epoch 2/50, MSE 0.0012

14、6849/0.01, Gradient 0.474027/1e-010 TRAINLM, Performance goal met.从以上结果可以看出,网络训练速度很快,经过一次循环迭 代过程就差不多达到了要求的精度。 4). 网络测试y2 = sim(net,p); plot(p,t,p,y1,p,y2); title(训练后的网络输出结果); xlabel(时间); ylabel(仿真输出);5). 讨论改变非线性函数的频率和BP网络隐层神经元的数目,对于函 数逼近的效果有一定的影响。网络非线性程度越高,对于BP网 络的要求越高,则相同的网络逼近效果要差一些;隐层神经元 的数目对于网络逼近

15、效果也有一定影响,一般来说,隐层神经 元数目越多,则BP网络逼近非线性函数的能力越强,而同时网 络训练所用的时间相对来说要长一些。 (1) 频率参数设为k=2,隐层神经元数目仍为n=10,结果如下面 各图所示:(2) 频率参数设为k=1,隐层神经元数目改为n=5,结果如下面各 图所示:3.7.2 模式识别计算机模式识别是近年来发展起来的技术。如利用机器来识 别银行的签字,那么工作人员就能在相同的时间里做更多的工 作,既节省了时间,又节约了人力物力资源。下面介绍在模式 识别中应用BP网络的简单实例。 1). 问题提出 设计一个网络并训练它来识别字母表中的26个字母,数字成 像系统对每个字母进行数

16、字分析将其变成数字信号。下图(左) 显示的就是字母A的网格图。但是,这只是理想图像系统得到的 结果。实际情况总会存在一些噪声干扰,或者存在一些非线性 因素,实际得到的字母网格图如下图(右) 所示。 要求设计网络,不仅能够对理想输入向量进行很好的分类, 也能够准确识别含有误差的输入向量。 字母A的网格图 有噪声字母A的网格图 本例中,26个字母均被 定义成输入向量,每个 代表字母的输入向量均 有35(5x7)个元素,这样 就组成了一个输入向量 矩阵alphabet。期望输出 向量被定义成一个变量 targets,期望输出向量含 有26个元素,字母在字 母表中所占位置处元素 为1,其他位置为0。例 如,因为字母A在字母表 中是第一个字母,所以 其期望输出向量为(1,0 ,0) 2). 网络建立根据上面提出的设计要求,输入向量具有35个元素,网络输 出就是反映字母所在位

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号