基于BP神经网络的非线性函数拟合
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于BP神经网络的非线性函数拟合
摘要:本文建立BP神经网络对一个多输入多输出系统的二元非线性函数进行拟合,仿真实验表明:在样本数据充足且不含噪声的情况下,训练的精度越高,逼近的效果越好;数据不充足且不含噪声时,训练精度的高低在一定范围内对于网络性能没有决定性的影响,网络性能主要取决于初始化;不管训练数据是否充足,若含有噪声,训练精度过高会使网络泛化能力降低。
0引言
作为当前应用最为广泛的一种人工神经网络,BP网络在函数逼近、模式识别、数据压缩、智能控制等领域有着非常广泛的应用。BP网络由大量简单处理单元广泛互联而成,是一种对非线性函数进行权值训练的多层映射网络,结构简单,工作状态稳定,具有优良的非线性映射能力,理论上它能够以任意精度逼近任意非线性函数。BP神经网络通过学习能够存储大量输入输出样本中蕴含的映射关系,只需提供足够的样本模式对BP网络进行训练,而无需事先了解数学方程。本文采用BP神经网络解决下列函数拟合问题。
函数逼近:设计一个神经网络拟合下列多输入多输出函数:
y1=2+x11.5-1.5sin(3x2); y2=x2sin(x1)+x1cos(x2); 1< x1, x2<5 产生200个数据,其中100个用来训练网络,另外100个用于网络模型的测试。1BP神经网络结构和算法
一个典型的3层BP神经网络结构如图1所示,包括输入层、隐含层和输出层。各层
神经元之间无反馈连接,各层内神经元之间无任何连接。其中隐含层的状态影响输入输出之间的关系,及通过改变隐含层的权系数,就可以改变整个多层神经网络的性能。BP 神经网络的学习过程由正向传播和反向传播组成。在正向传播中,输入的样本从输入层经过隐含层之后,传向输出层,在逐层处理的过程中,每一层神经元的状态只对下一层神经元的状态产生影响。在输出层把现行输出和期望输出进行比较,如果现行输出不等于期望输出,则进入反向传播过程。反向传播过程中,误差信号从输出层向输入层传播,并对每个隐含层的各个神经元的权系数进行修改,使误差不断减少,直至达到精度要求。BP 算法的实质是求取误差函数最小值问题,通过多个样本的反复训练,一般采用非线性规划中的最速下降方法,按误差函数的负梯度方向修改权系数。
隐含节点
图1 典型3层BP神经网络结构图
2用于函数拟合的BP神经网络模型的建立
为建立函数拟合的BP神经网络模型,一般要考虑以下几步:
(1) 样本数据的产生
为简单起见,在x1,x2均属于[1,5]区间内选择均匀分布的200个数据点分别作为训练和测试样本。如图2所示。
x1
x 2
图2 数据样本
(2) 数据预处理
通常需要将样本数据归一化,由于这里的数据变化范围不大,所以暂不考虑对数据的归一化。 (3) 网络结构的选择
①网络层数:理论证明,在不限制隐层节点数目的情况下,单隐层BP 网络可以实现任意非线性映射。但本题中,仿真表明采用两个隐层更为合适。
②输入输出层节点数:本题中,所拟合的函数为两个输入变量,两个输出变量。所以BP 网络输入层设置两个节点,输出层也设置两个节点。
③隐层节点数:隐含层节点数目的选择是一个十分复杂的问题, 到目前为止, 还没有用数学公式来明确表示应该怎样确定隐含层的节点数目。节点数目太少, 不能很好的表达样本数据种所蕴含的规律; 但隐含层节点太多又导致学习训练时间太长, 误差也不一定最佳,还可能出现“过度吻合”的问题,使得泛化能力降低。本题中隐层节点的选取主要采用试凑的办法。如前所述,这里设置两个隐层,第一层节点设置分为3和30两种,第二层节点设置分为2和20两种,以便于对比。
④神经元的传递函数:隐层采用单极性sigmoid函数“tansig”,输出层采用
线性传递函数“purelin”。
(4) 训练及仿真
采用批训练方法,一批数据即为全部100个训练样本。输入x1,x2∈[1.2,4.8],输出y1∈[1.8660,14.0105];y2∈[-7.9795,4.9380]。
通过对100个样本进行一次整体学习后,再统一修改一次网络的权。学习算法采用学习率可变的动量BP算法(traingdx)。训练目标为网络输出与样本输出之间的均方误差(mse),训练精度可根据需要设定。BP网络训练完成以后,即可用于仿真。将测试数据输入网络,得到的网络输出与样本输出进行比较,即可分析网络的泛化能力。当然,通过网络仿真的数据需要经过适当的反归一化变换才能够与测试样本的输出直接进行比较。
(5) 测试及仿真
为检验所训练出的网络是否满足要求,需要对其进行仿真测试。测试数据的输入x1,x2∈[1.4,5.0],输出y1∈[2.1587,14.5593];y1∈[-8.0943,5.3798]。
3模型仿真及验证
按前述方法用下面的指令创建神经网络:
net= newff ([1.2 4.8;1.2 4.8],[3,2,2] , {'tansig', 'tansig', 'purelin'}, 'traingdx',
'learngdm' );
待拟合的函数图形化结果如图3所示。图3(a)为y1,y2的三维视图,图3(b)为y1的二维投影视图,图3(c)为y2的二维投影视图。
x1
待拟合的曲面y1x2
y 1
x1
待拟合的曲面y2
x2
y 2
图 3(a) 待拟合函数的三维视图
x1
y 1
平面x2=3截曲面y1所得的曲线在x1-y1面上的投影
x2
y 1
平面x1=3截曲面y1所得的曲线在x2-y1面上的投影
图 3(b) 待拟合函数y1的投影视图
x1
y 2
x2
y 2
图 3(c) 待拟合函数y2的投影视图
图 3 待拟合的函数图形化结果
首先采用学习率可变的动量BP 算法(其训练函数为'traingdx'),取不同的隐含层得到