基于matlab的bp神经网络应用_毕设论文 下载本文

基于MATLAB的BP神经网络应用

其中,

N:Q个S维的输入列向量; A:函数返回值,A=N。

3.1.3 BP网络学习函数

1)learngd

该函数为梯度下降权值/阈值学习函数,它通过神经元的输入和误差,以及权值和阈值的学习效率,来计算权值或阈值的变化率。调用格式为:

[dW,ls]=learngd(W,P,Z,N,A,T,E,gW,gA,D,LP,LS) [db,ls]=learngd(b,ones(1,Q),Z,N,A,T,E,gW,gA,D,LP,LS) info=learngd(code)

2) learngdm函数为梯度下降动量学习函数,它利用神经元的输入和误差、权值或阈值的学习速率和动量常数,来计算权值或阈值的变化率。

3.1.4 BP网络训练函数

1)train

神经网络训练函数,调用其他训练函数,对网络进行训练。该函数的调用格式为: [net,tr,Y,E,Pf,Af]=train(NET,P,T,Pi,Ai) [net,tr,Y,E,Pf,Af]=train(NET,P,T,Pi,Ai,VV,TV)

2) traingd函数为梯度下降BP算法函数。traingdm函数为梯度下降动量BP算法函数。

3.2 BP网络在函数逼近中的应用

3.2.1 问题的提出

BP网络由很强的映射能力,主要用于模式识别分类、函数逼近、函数压缩等。下面将通过实例来说明BP网络在函数逼近方面的应用。

要求设计一个BP网络,逼近以下函数:g(x)=1+sin(k*pi/4*x),实现对该非线性函数的逼近。其中,分别令k=1,2,4进行仿真,通过调节参数(如隐藏层节点个数等)得出信号的频率与隐层节点之间,隐层节点与函数逼近能力之间的关系。

3.2.2 基于BP神经网络逼近函数

步骤1:假设频率参数k=1,绘制要逼近的非线性函数的曲线。函数的曲线如图3.2所示

12

基于MATLAB的BP神经网络应用

k=1;

p=[-1:.05:8]; t=1+sin(k*pi/4*p); plot(p,t,'-');

title('要逼近的非线性函数'); xlabel('时间'); ylabel('非线性函数');

图3.2 要逼近的非线性函数曲线

步骤2:网络的建立

应用newff()函数建立BP网络结构。隐层神经元数目n可以改变,暂设为n=3,输出层有一个神经元。选择隐层和输出层神经元传递函数分别为tansig函数和purelin函数,网络训练的算法采用Levenberg – Marquardt算法trainlm。

n=3;

net = newff(minmax(p),[n,1],{'tansig' 'purelin'},'trainlm'); 对于初始网络,可以应用sim()函数观察网络输出。 y1=sim(net,p); figure;

plot(p,t,'-',p,y1,':') title('未训练网络的输出结果'); xlabel('时间');

ylabel('仿真输出--原函数-');

同时绘制网络输出曲线,并与原函数相比较,结果如图3.3所示。

13

基于MATLAB的BP神经网络应用

图3.3 未训练网络的输出结果

其中 “ ” 代表要逼近的非线性函数曲线;

“‥‥‥” 代表未经训练的函数曲线;

因为使用newff( )函数建立函数网络时,权值和阈值的初始化是随机的,所以网络输出结构很差,根本达不到函数逼近的目的,每次运行的结果也有时不同。

步骤3:网络训练

应用train()函数对网络进行训练之前,需要预先设置网络训练参数。将训练时间设置为50,训练精度设置为0.01,其余参数使用缺省值。训练后得到的误差变化过程如图3.4所示。

图3.4 训练过程

net.trainParam.epochs=50; (网络训练时间设置为50)

14

基于MATLAB的BP神经网络应用

net.trainParam.goal=0.01;(网络训练精度设置为0.01) net=train(net,p,t);(开始训练网络)

TRAINLM-calcjx, Epoch 0/50, MSE 9.27774/0.01, Gradient 13.3122/1e-010 TRAINLM-calcjx, Epoch 3/50, MSE 0.00127047/0.01, Gradient 0.0337555/1e-010 TRAINLM, Performance goal met.

从以上结果可以看出,网络训练速度很快,经过一次循环跌送过程就达到了要求的精度0.01。

步骤4: 网络测试

对于训练好的网络进行仿真: ]y2=sim(net,p); figure;

plot(p,t,'-',p,y1,':',p,y2, '--') title('训练后网络的输出结果'); xlabel('时间'); ylabel('仿真输出');

绘制网络输出曲线,并与原始非线性函数曲线以及未训练网络的输出结果曲线相比较,比较出来的结果如图3.5所示。

图3.5 训练后网络的输出结果

其中 “ ” 代表要逼近的非线性函数曲线;

“‥‥‥” 代表未经训练的函数曲线; “―――” 代表经过训练的函数曲线;

从图中可以看出,得到的曲线和原始的非线性函数曲线很接近。这说明经过训练后,BP网络对非线性函数的逼近效果比较好。

15