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

上传人:scccc 文档编号:12544234 上传时间:2021-12-04 格式:DOCX 页数:13 大小:171.39KB
返回 下载 相关 举报
BP神经网络逼近非线性函数.docx_第1页
第1页 / 共13页
BP神经网络逼近非线性函数.docx_第2页
第2页 / 共13页
BP神经网络逼近非线性函数.docx_第3页
第3页 / 共13页
BP神经网络逼近非线性函数.docx_第4页
第4页 / 共13页
BP神经网络逼近非线性函数.docx_第5页
第5页 / 共13页
亲,该文档总共13页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

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

1、应用 BP 神经网络逼近非线性函一、实验要求1、逼近的非线性函数选取为 y=sin(x 1)+cos(x 2) ,其中有两个自变量即 x1,x2,一个因变 量即 y。2、逼近误差 <5% ,即:应用测试数据对网络进行测试时,神经网络的输出与期望值的 最大误差的绝对值小于期望值的5% 。3、学习方法为经典的 BP 算法或改进形式的 BP 算法,鼓励采用改进形式的 BP 算法。4、不允许采用 matlab 中现有的关于神经网络建立、学习、仿真的任何函数及命令。二、实验基本原理2.1 神经网络概述BP 神经网络是一种多层前馈神经网络,该网络的主要特点是信号前向传播,误差反向 传播。 在前向传递

2、中,输入信号从输入层经隐含层逐层处理,直至输出层。 每一层的神经元状态只影响下一层神经元状态。 如果输出层得不到期望输出, 则转入反向传播, 根据预判误 差调整网络权值和阈值,从而使 BP 神经网络预测输出不断逼近期望输出。 BP 神经网络的 拓扑结构如图所示。2.2 BP 神经网络训练步骤BP 神经网络预测前首先要训练网络, 通过训练使网络具有联想记忆和预测能力。 BP 神 经网络的训练过程包括以下几个步骤。步骤 1 :网络初始化。 根据系统输入输出序列 (X,Y) 确定网络输入层节点数 n 、隐含层节 点数 l、输出层节点数 m ,初始化输入层、 隐含层和输出层神经元之间的连接权值ij,j

3、k ,初始化隐含层阈值 a,输出层阈值 b ,给定学习速率和神经元激励函数。步骤 2 :隐含层输出计算。根据输入变量 X,输入层和隐含层间连接权值 ij 以及隐含层阈值 a,计算隐含层输出 H 。Hjnf(i1ij xi aj )j=1,2 , l式中,l 为隐含层节点数, f 为隐含层激励函数,该函数有多种形式, 一般选取为 f(x) 1 x1e步骤 3 :输出层输出计算。根据隐含层输出H,连接权值 jk和阈值 b,计算 BP 神经网络预测输出O。lOkH jj1jkbkk=1,2 , m步骤4:误差计算。根据网络预测输出和期望输出 Y,计算网络预测误差 e。ekYkOkk=1,2 , m步

4、骤5:权值更新。根据网络预测误差e 更新网络连接权值 ij, jkijij H j(1H j )x(i)jk eki=1,2, ,n j=1,2, ,lk1jkjkH j ekj=1,2, ,l k=1,2, ,m步骤6:阈值更新。根据网络预测误差e 更新网络节点阈值 a,b 。步骤7:aj ajH j (1mH j )jk ekk1j=1,2, ,lbk bk ekk=1,2, ,m判断算法迭代是否结束,若没有结束,返回步骤2。2.3 附加动量法经典 BP 神经网络采用梯度修正法作为权值和阈值的学习算法, 从网络预测误差的负梯 度方向修正权值和阈值, 没有考虑以前经验的积累,学习过程收敛缓慢

5、。对于这个问题,可 以采用附加动量法来解决,带附加动量的算法学习公式为(k) (k 1) (k) a (k 1) (k 2)式中, (k),(k-1) ,(k-2)分别为 k,k-1,k-2 时刻的权值; a 为动量学习率,一般取值 为 0.95 。2.4 程序流程图三、程序简述本次实验选择逼近的非线性函数为y=sin(x 1)+cos(x 2)。程序首先创建用于神将网路训9,程练的样本数据,取在区间 -4.5,4.5 之间均匀分布的数值,由于有两个自变量,所以一共产 生 361 组输入输出数据。其次确定神经网络的训练参数,比如隐含层节点数、学习速率、 学习目标、隐含层和输出层的权值阈值等,其

6、中隐含层节点数在参考相关资料后确定为 这样不仅在训练结束后可以获得较小的误差, 而且也不会使训练次数过大从而耗时较长; 序中隐含层和输出层的权值阈值是采取随机产生的方法获得的, 并且之后的修改方法采用了 附加动量法,减少训练次数加快网络收敛。由于 matlab 可以采用矩阵运算的形式,所以输 入输出数据和网络权值阈值构建生成相应的矩阵, 这样可以在全部数据遍历一次之后再进行权值阈值修改, 同样可以缩短网络训练时间。 最后, 根据修正后的权值阈值就输入数据预测 网路输出, 和期望输出数据进行比较, 计算输出误差, 直至训练结束根据训练结果画出相应 图像。最初程序中神经网络训练只有当最大预测误差小

7、于 5% 之后才停止,实际情况中,当输 出接近 0 时只要有微小的变化就会产生较大的误差,这样不仅导致网络训练次数增加耗时 长,还会使网络收敛速度变慢; 在经过查询相关资料之后, 训练结束条件除了最大预测误差 小于 5% 之外,还增加了目标函数,目标函数是取所有误差的平方和,当目标函数的计算值 小于预期目标时同样也会停止训练, 此时默认训练已达目标。 在实际检验过程中发现, 加入 目标函数后不仅可以有效地改善收敛速度慢耗时长的问题, 同时各个坐标点的预测误差也在 期望值之内,达到了实验要求。四、实验结果由于程序中权值阈值的取值是随机的,所以取其中一次的结果展示。最大训练次数为15329 ,训练

8、结束后的最大误差为 2.5331 。图 1 非线性函数图像图 2 网络图图 3 误差曲线程序:clcclear% 创建输入数据,产生 361 组输入输出数据 row = 1;for i=-4.5:0.5:4.5for j=-4.5:0.5:4.5input(row,1) = i;input(row,2) = j;output(row,1) = sin(input(row,1) + cos(input(row,2); row = row+1;endend%神经网络结构 inputnum = 2; hiddennum = 9; outputnum = 1; %网络参数 learnSpeed = 0

9、.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 = input ones(361,1)'

10、;output_train = output;HH = w1 b1;OO = w2 b2;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*

11、hiddenOut; error = output_train-networkOut'%利用目标函数,判断是否结束循环 aimJ = sumsqr(error) if (aimJ<learnGoal) break;end%统计训练次数 trainNum = trainNum+1;%权值阈值调整因子 factor2 = error'factor1 = w2'*factor2.*collectHiddenOut.*(1-collectHiddenOut); %调整权值和阈值调节量dHH = factor1*input_train' dOO = factor2*

12、hiddenOut'%权值阈值调整 if (trainNum<3)HH = HH + learnSpeed*dHH; OO = OO + learnSpeed*dOO; collectHH = collectHH HH; collectOO = collectOO OO;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)

13、*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,(train Num-3)*10+1):(trainNum-3)*10+10);collectHH = collectHH HH;collectOO = collectOO OO;w1 = HH(:,1:inputnum);b1 = HH(:,1+inputnum);

14、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

15、,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

16、',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');

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

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1