BP神经网络逼近非线性函数.docx

上传人:b****6 文档编号:8386450 上传时间:2023-01-31 格式:DOCX 页数:9 大小:258.62KB
下载 相关 举报
BP神经网络逼近非线性函数.docx_第1页
第1页 / 共9页
BP神经网络逼近非线性函数.docx_第2页
第2页 / 共9页
BP神经网络逼近非线性函数.docx_第3页
第3页 / 共9页
BP神经网络逼近非线性函数.docx_第4页
第4页 / 共9页
BP神经网络逼近非线性函数.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

BP神经网络逼近非线性函数.docx

《BP神经网络逼近非线性函数.docx》由会员分享,可在线阅读,更多相关《BP神经网络逼近非线性函数.docx(9页珍藏版)》请在冰豆网上搜索。

BP神经网络逼近非线性函数.docx

BP神经网络逼近非线性函数

 

应用BP神经网络逼近非线性函

 

一、实验要求

1、逼近的非线性函数选取为y=sin(x1)+cos(x2),其中有两个自变量即x1,x2,一个因变量即y。

2、逼近误差<5%,即:

应用测试数据对网络进展测试时,神经网络的输出与期望值的最大误差的绝对值小于期望值的5%。

3、学习方法为经典的BP算法或改良形式的BP算法,鼓励采用改良形式的BP算法。

4、不允许采用matlab中现有的关于神经网络建立、学习、仿真的任何函数及命令。

二、实验根本原理

2.1神经网络概述

BP神经网络是一种多层前馈神经网络,该网络的主要特点是信号前向传播,误差反向传播。

在前向传递中,输入信号从输入层经隐含层逐层处理,直至输出层。

每一层的神经元状态只影响下一层神经元状态。

假如输出层得不到期望输出,那么转入反向传播,根据预判误差调整网络权值和阈值,从而使BP神经网络预测输出不断逼近期望输出。

BP神经网络的拓扑构造如下图。

 

2.2BP神经网络训练步骤

BP神经网络预测前首先要训练网络,通过训练使网络具有联想记忆和预测才能。

BP神经网络的训练过程包括以下几个步骤。

步骤1:

网络初始化。

根据系统输入输出序列(X,Y)确定网络输入层节点数n、隐含层节点数l、输出层节点数m,初始化输入层、隐含层和输出层神经元之间的连接权值ωij,ωjk,初始化隐含层阈值a,输出层阈值b,给定学习速率和神经元鼓励函数。

步骤2:

隐含层输出计算。

根据输入变量X,输入层和隐含层间连接权值ωij

以及隐含层阈值a,计算隐含层输出H。

j=1,2,…,l

式中,l为隐含层节点数,f为隐含层鼓励函数,该函数有多种形式,一般选取为

步骤3:

输出层输出计算。

根据隐含层输出H,连接权值ωjk和阈值b,计算BP神经网络预测输出O。

k=1,2,…,m

步骤4:

误差计算。

根据网络预测输出O和期望输出Y,计算网络预测误差e。

k=1,2,…,m

步骤5:

权值更新。

根据网络预测误差e更新网络连接权值ωij,ωjk

i=1,2,…,nj=1,2,…,l

j=1,2,…,lk=1,2,…,m

步骤6:

阈值更新。

根据网络预测误差e更新网络节点阈值a,b。

j=1,2,…,l

k=1,2,…,m

步骤7:

判断算法迭代是否完毕,假设没有完毕,返回步骤2。

2.3附加动量法

经典BP神经网络采用梯度修正法作为权值和阈值的学习算法,从网络预测误差的负梯度方向修正权值和阈值,没有考虑以前经历的积累,学习过程收敛缓慢。

对于这个问题,可以采用附加动量法来解决,带附加动量的算法学习公式为

式中,ω(k),ω(k-1),ω(k-2)分别为k,k-1,k-2时刻的权值;a为动量学习率,一般取值为0.95。

 

2.4程序流程图

三、程序简述

本次实验选择逼近的非线性函数为y=sin(x1)+cos(x2)。

程序首先创立用于神将网路训练的样本数据,取在区间[-4.5,4.5]之间均匀分布的数值,由于有两个自变量,所以一共产生361组输入输出数据。

其次确定神经网络的训练参数,比方隐含层节点数、学习速率、学习目的、隐含层和输出层的权值阈值等,其中隐含层节点数在参考相关资料后确定为9,这样不仅在训练完毕后可以获得较小的误差,而且也不会使训练次数过大从而耗时较长;程序中隐含层和输出层的权值阈值是采取随机产生的方法获得的,并且之后的修改方法采用了附加动量法,减少训练次数加快网络收敛。

由于matlab可以采用矩阵运算的形式,所以输入输出数据和网络权值阈值构建生成相应的矩阵,这样可以在全部数据遍历一次之后再进展权值阈值修改,同样可以缩短网络训练时间。

最后,根据修正后的权值阈值就输入数据预测网路输出,和期望输出数据进展比拟,计算输出误差,直至训练完毕根据训练结果画出相应图像。

最初程序中神经网络训练只有当最大预测误差小于5%之后才停顿,实际情况中,当输出接近0时只要有微小的变化就会产生较大的误差,这样不仅导致网络训练次数增加耗时长,还会使网络收敛速度变慢;在经过查询相关资料之后,训练完毕条件除了最大预测误差小于5%之外,还增加了目的函数,目的函数是取所有误差的平方和,当目的函数的计算值小于预期目的时同样也会停顿训练,此时默认训练已达目的。

在实际检验过程中发现,参加目的函数后不仅可以有效地改善收敛速度慢耗时长的问题,同时各个坐标点的预测误差也在期望值之内,到达了实验要求。

四、实验结果

由于程序中权值阈值的取值是随机的,所以取其中一次的结果展示。

最大训练次数为15329,训练完毕后的最大误差为2.5331。

 

图1非线性函数图像

 

图2网络图

 

图3误差曲线

程序:

clc

clear

%创立输入数据,产生361组输入输出数据

row=1;

 

input(row,1)=i;

input(row,2)=j;

output(row,1)=sin(input(row,1))+cos(input(row,2));

row=row+1;

end

end

%神经网络构造

inputnum=2;%输入层节点数

hiddennum=9;%隐含层节点数

outputnum=1;%输出层节点数

%网络参数

learnSpeed=0.0003;%学习率

learnGoal=0.05;%目的

%隐含层及输出层的权值和阈值

w1=0.2*rand(hiddennum,inputnum)-0.1;

b1=0.2*rand(hiddennum,1)-0.1;

w2=0.2*rand(outputnum,hiddennum)-0.1;

b2=0.2*rand(outputnum,1)-0.1;

%取训练数据和预测数据

%采用全部样本遍历一次后再进展权值阈值调整

%调整采用附加动量法,加快收敛速度,减少遍历次数

input_train=[inputones(361,1)]';

output_train=output;

HH=[w1b1];

OO=[w2b2];

collectHH=[];

collectOO=[];

%用训练数据训练BP神经网络

aimJ=0;

max_rate=100;%初始化最大样本误差

trainNum=0;%初始化训练次数

while(max_rate>learnGoal)

collectHiddenOut=logsig(HH*input_train);%计算隐含层输出

hiddenOut=[collectHiddenOut'ones(361,1)]';

networkOut=OO*hiddenOut;%计算网络输出

error=output_train-networkOut';%计算误差

%利用目的函数,判断是否完毕循环

aimJ=sumsqr(error)

if(aimJ

break;

end

%统计训练次数

trainNum=trainNum+1;

%权值阈值调整因子

factor2=error';

factor1=w2'*factor2.*collectHiddenOut.*(1-collectHiddenOut);

%调整权值和阈值调节量

dHH=factor1*input_train';

dOO=factor2*hiddenOut';

%权值阈值调整

if(trainNum<3)

HH=HH+learnSpeed*dHH;

OO=OO+learnSpeed*dOO;

collectHH=[collectHHHH];

collectOO=[collectOOOO];

w1=HH(:

1:

inputnum);

b1=HH(:

1+inputnum);

w2=OO(:

1:

hiddennum);

b2=OO(:

1+hiddennum);

else

%附加动量法

HH=HH+learnSpeed*dHH+0.94*(collectHH(:

((trainNum-2)*3+1):

((trainNum-2)*3+3))-collectHH(:

((trainNum-3)*3+1):

((trainNum-3)*3+3)));

OO=OO+learnSpeed*dOO+0.94*(collectOO(1,((trainNum-2)*10+1):

((trainNum-2)*10+10))-collectOO(1,((trainNum-3)*10+1):

((trainNum-3)*10+10)));

collectHH=[collectHHHH];

collectOO=[collectOOOO];

w1=HH(:

1:

inputnum);

b1=HH(:

1+inputnum);

w2=OO(:

1:

hiddennum);

b2=OO(:

1+hiddennum);

end

%训练数据测试,计算最大误差率

hiddenOut_test=logsig(HH*input_train);%参数修改后的隐含层输出

network_test=w2*hiddenOut_test+repmat(b2,1,361);%预测结果

rate=(output_train-network_test')./output_train;%误差率

max_rate=max(abs(rate));%误差率最大值

end

%显示测试结果

%标准函数图像y=sin(x1)+cos(x2)

[x,y]=meshgrid(-4.5:

0.1:

4.5,-4.5:

0.1:

4.5);

z=sin(x)+cos(y);

figure

(1)

mesh(x,y,z)

xlabel('x1');

ylabel('x2');

zlabel('y');

%网络图

t1=linspace(min(input(:

1)),max(input(:

1)));

t2=linspace(min(input(:

2)),max(input(:

2)));

[X,Y]=meshgrid(t1,t2);

Z=griddata(input(:

1),input(:

2),network_test',X,Y);

figure

(2)

mesh(X,Y,Z)

xlabel('Input1');

ylabel('Input2');

zlabel('Output');

%绘制误差曲线

t3=linspace(min(input(:

1)),max(input(:

1)));

t4=linspace(min(input(:

2)),max(input(:

2)));

[X1,X2]=meshgrid(t3,t4);

E=griddata(input(:

1),input(:

2),error,X1,X2);

figure(3)

mesh(X1,X2,E)

xlabel('Input1');

ylabel('Input2');

zlabel('error');

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1