用BP网络逼近非线性函数f(x)=sin2x+cos5x
- 格式:docx
- 大小:107.21 KB
- 文档页数:8
3、 试用BP 神经网络逼近非线性函数f(u) =)5.0u (9.1e+-sin(10u) 其中,u ∈[-0.5,0.5](1)解题步骤:①网络建立:使用“net=newff(minmax(x), [20, 1], {'tansig ’,’ purelin' });,语句建立个前馈BP 神经网络。
该BP 神经网络只含个隐含层,且神经元的个数为20。
隐含层和输出层神经元的传递函数分别为tansig 和pure-lin 。
其他参数默认。
②网络训练:使用“net=train (net, x , y) ;”语句训练建立好的BP 神经网络。
当然在网络训练之前必须设置好训练参数。
如设定训练时间为50个单位时间,训练目标的误差小于0.01,用“net.trainParam.epochs=50; net.train-Param.goal=0.01;”,语句实现。
其他参数默认。
③网络仿真:使用“y1=sim(net, x); y2=sim(net, x};”语句仿真训练前后的BP 神经网络。
(2)程序如下:clear all ;x=[-0.5:0.01:0.5];y=exp(-1.9*(0.5+x)).*sin(10*x);net=newff(minmax(x),[20,1],{'tansig' 'purelin'});y1=sim(net,x); %未训练网络的仿真结果 net.trainParam.epochs=50;net.trainParam.goal=0.01;net=train(net,x,y);y2=sim(net,x); %训练后网络的仿真结果 figure;plot(x,y,'-',x,y1,'-',x,y2,'--')title('原函数与网络训练前后的仿真结果比较');xlabel('x');ylabel('y');legend('y','y1','y2');grid on(3)仿真结果如图:图1图1为原函数y与网络训练前后(y1,y2)的仿真结果比较图。
机器学习作业一BP神经网络实现函数逼近一.算法描述BP(Back Propagation)神经网络是1986年由Rumelhart和McCelland为首的科学家小组提出,是一种按误差逆传播算法训练的多层前馈网络,是目前应用最广泛的神经网络模型之一。
BP网络能学习和存贮大量的输入-输出模式映射关系,而无需事前揭示描述这种映射关系的数学方程。
它的学习规则是使用梯度下降法,通过反向传播来不断调整网络的权值和阈值,使网络的误差平方和最小。
BP神经网络模型拓扑结构包括输入层(input)、隐层(hidden layer)和输出层(output layer)。
二.数据描述逼近函数y = sin(x)三.算法参数输入学习率,迭代次数,逼近函数,神经网络规模输出逼近的函数四.实验流程反向传播算法(Back Propagation)分二步进行,即正向传播和反向传播。
这两个过程简述如下:1.正向传播输入的样本从输入层经过隐单元一层一层进行处理,传向输出层;在逐层处理的过程中。
在输出层把当前输出和期望输出进行比较,如果现行输出不等于期望输出,则进入反向传播过程。
2.反向传播反向传播时,把误差信号按原来正向传播的通路反向传回,逐层修改连接权值,以望代价函数趋向最小。
输入层输入向量(n维):X=(x1,x2,…,xi,…,xn)T隐层输出向量(隐层有m个结点):Y=(y1,y2,…,yj,…,ym)T输出层输出向量(l维):O=(o1,o2,…,ok,…,ol)T期望输出向量:d=(d1, d2,…,dk,…,dl)T输入层到隐层之间的权值矩阵:V=(V1,V2,…,Vj,…,Vm)隐层到输出层之间的权值矩阵用:W=(W1,W2,…,Wk,…,Wl)对输出层第k个结点和隐含层的第j个结点有如下关系:激活函数f(x)常用sigmoid函数(一个在生物学中常见的S型的函数,也称为S 形生长曲线)或者tanh(双曲正切)函数。
实验二 基于BP 神经网络算法的正余弦函数逼近班级:学号:姓名:1. 实验目的(1) 掌握MATLAB 子函数编写与调用。
(2) 理解BP 神经元网络算法的原理,并利用程序实现通过BP 算法逼近任意非线性函数。
2. 实验内容与实验要求(1) 掌握BP 神经网络算法的原理。
(2) 掌握MATLAB 子函数的编写方法及调用方法。
(3) 根据BP 神经网络算法的原理,编写MA TLAB 程序,逼近非线性函数。
3. 实验原理一个2×3×1的神经网络即输入层有两个节点,隐层含三个节点,输出层有一个节点,图1 神经网络结构图图中ij w )5,4,3;2,1(==j i 为输入层与隐层的权值,jk w )6;5,4,3(==k j 为隐层与输出层的权值,1x 、2x 是神经网络的输入值,y 是网络的输出值,p y 为教师信号,e 为神经网络的实际输出与期望输出的误差。
在这个神经网络中,节点1,2是输入层, 节点3,4,5是隐层,节点6是输出层;输入层和隐层之间的权值依次252423151413,,,,,w w w w w w ,隐层和输出层间的权值为564636,,w w w ,下角标为节点的编号;隐层和输出层节点的阈值依次为3θ,4θ,5θ,6θ。
①前馈计算设隐层的第j 个节点的输入和输出分别为:∑=⋅=N i i ij j O wI 1)(j j I f O =其中)(j I f 为激励函数 j I j e I f -+=11)(由于隐层的输出就是输出层的输入,则输出层第k 个节点的总输入和输出分别为: ∑=⋅=H j j jk k O wI 1)(k k k I f O y ==若网络输出与实际输出存在误差,则将误差信号反向传播,并不断地修正权值,直至误差达到要求为止。
②权值调整设误差函数定义为: ∑=-=M k k k p y d E 12)(21 为了简便,以下计算都是针对每个节点而言,误差函数p E 记作E 。
应用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.2 BP神经网络训练步骤BP神经网络预测前首先要训练网络,通过训练使网络具有联想记忆和预测能力。
BP神经网络的训练过程包括以下几个步骤。
步骤1:网络初始化。
根据系统输入输出序列(X,Y)确定网络输入层节点数n、隐含层节点数l、输出层节点数m,初始化输入层、隐含层和输出层神经元之间的连接权值ωij,ωjk,初始化隐含层阈值a,输出层阈值b,给定学习速率和神经元激励函数。
步骤2:隐含层输出计算。
根据输入变量X,输入层和隐含层间连接权值ωij以及隐含层阈值a,计算隐含层输出H。
j1(a )nj ij ii H f x ω==-∑ j=1,2,…,l式中,l 为隐含层节点数,f 为隐含层激励函数,该函数有多种形式,一般选取为1(x)1xf e-=+ 步骤3:输出层输出计算。
根据隐含层输出H ,连接权值ωjk 和阈值b ,计算BP 神经网络预测输出O 。
1lk j jk k j O H b ω==-∑ k=1,2,…,m步骤4:误差计算。
一、作业题目BP-Based Non-linear model approximation(基于BP网络的非线性模型逼近问题)二、编程工具及语言本次编程工具是Microsoft Visual Studio 2010中文版软件,编程语言为C#语言,由此实现界面化程序模型。
三、BP界面简介其中右上角的空白区域是训练过程中动态显示误差的变化曲线;左下角的空白区域是显示训练数据网络输出值和训练数据真实值的对比图;右下角空白区域是用来显示泛化数据真实值和泛化数据网络输出值的对比图;这三个图待输入好正确参数后,是动态显示出的,具有很好的直观效果。
四、实验结果本次程序源代码以电子版格式放到老师邮箱请查收!①单输入单输出模型的验证对函数51xy x-=++的逼近1>数据样本集的产生:用matlab中的随机数函数rand,代码如下:a=rand(150,1);y1=5*logsig(a)+a;noise=0.02*randn(150,1);y=y1+noise;test=[a,y];b=rand(150,1);y2=5*logsig(a)+a;Generalization=[b,y2];其中test为训练样本,对应输入数据a序列其函数输出值y是真实值y1加上干扰noise之后的值;泛化样本为Generalization,训练样本和泛化样本都是用随机数函数rand产生的样本集,保证了他们里的数据不相同。
然后把训练数据集和泛化数据集分别保存成Test.txt和Generalization.txt放在BP程序工作路径下,以便程序里调用该数据。
2> 训练和泛化结果其结果如下图所示:对于单输入单输出系统,输入输出节点都为1,并设计隐层数设为25,学习速率为0.5,动量因子为0.6,期望误差设为0.014,最大训练次数为100;由此训练网络可以得到的结果如小窗口所示为: 训练次数为100次,说明训练到最后没有满足期望的误差;训练过程的平均、最大、最小相对误差分别为0.0146、0.0722、0.000259;泛化过程的平均、最大、最小相对误差分别为:0.0161、0.0731、0.00007264。
实验一、BP及RBF神经网络逼近一、实验目的1、了解MATLAB集成开发环境2、了解MATLAB编程基本方法3、熟练掌握BP算法的原理和步骤4、掌握工具包入口初始化及调用5、加深BP、RBF神经网络对任意函数逼近的理解二、实验内容1、MATLAB基本指令和语法。
2、BP算法的MATLAB实现三、实验步骤1、熟悉MATLAB开发环境2、输入参考程序3、设置断点,运行程序,观察运行结果四、参考程序1. BP算法的matlab实现程序%lr为学习步长,err_goal期望误差最小值,max_epoch训练的最大次数,隐层和输出层初值为零lr=0.05;err_goal=0.0001;max_epoch=10000;a=0.9;Oi=0;Ok=0;%两组训练集和目标值X=[1 1;-1 -1;1 1];T=[1 1;1 1];%初始化wki,wij(M为输入节点j的数量;q为隐层节点i的数量;L为输出节点k的数量)[M,N]=size(X);q=8;[L,N]=size(T);wij=rand(q,M);wki=rand(L,q);wij0=zeros(size(wij));wki0=zeros(size(wki));for epoch=1:max_epoch%计算隐层各神经元输出NETi=wij*X;for j=1:Nfor i=1:qOi(i,j)=2/(1+exp(-NETi(i,j)))-1;endend%计算输出层各神经元输出NETk=wki*Oi;for i=1:Nfor k=1:LOk(k,i)=2/(1+exp(-NETk(k,i)))-1;endend%计算误差函数E=((T-Ok)'*(T-Ok))/2;if (E<err_goal)break;end%调整输出层加权系数deltak=Ok.*(1-Ok).*(T-Ok);w=wki;wki=wki+lr*deltak*Oi';wki0=w;%调整隐层加权系数deltai=Oi.*(1-Oi).*(deltak'*wki)';w=wij;wij=wij+lr*deltai*X';wij0=w;endepoch %显示计算次数%根据训练好的wki,wij和给定的输入计算输出X1=X;%计算隐层各神经元的输出NETi=wij*X1;for j=1:Nfor i=1:qOi(i,j)=2/(1+exp(-NETi(i,j)))-1;endend%计算输出层各神经元的输出NETk=wki*Oi;for i=1:Nfor k=1:LOk(k,i)=2/(1+exp(-NETk(k,i)))-1;endendOk %显示网络输出层的输出2、BP逼近任意函数算法的matlab实现程序⏹X=-4:0.08:4;⏹T=1.1*(1-X+2*X.^2).*exp(-X.^2./2);⏹net=newff(minmax(X),[20,1],{'tansig','purelin'});⏹net.trainParam.epochs=15000;⏹net.trainParam.goal=0.001;⏹net=train(net,X,T);⏹X1=-1:0.01:1;⏹y=sim(net,X1);⏹figure;⏹plot(X1,y,'-r',X,T,':b','LineWidth',2);3.RBF能够逼近任意的非线性函数⏹X=-4:0.08:4;⏹T=1.1*(1-X+2*X.^2).*exp(-X.^2./2);⏹net=newrb(X,T,0.002,1);⏹X1=-1:0.01:1;⏹y=sim(net,X1);⏹figure;⏹plot(X1,y,'-r',X,T,':b','LineWidth',3);五、思考题1. 将结果用图画出。
智能技术实验三-BP程序的算法设计1熟悉BP网络的基本训练算法程序,练习课件上的相关程序。
(1)用BP网络逼近非线性函数f(x)=sin2x+cos5x程序:x=-0.8:0.05:0.75;t=sin(2*x)+cos(5*x);net=newff(minmax(x),[12,1],{'tansig','purelin'},'trainbfg','learngdm','sse');%利用准牛顿反向传播算法对网络进行训练,动量梯度下降权值与阈值的学习net.trainParam.epochs=1500;%训练步数net.trainParam.goal=0;%训练目标误差net.trainParam.lr=1.42;%学习速率net.trainParam.show=100;%现实训练结果的间隔步数[net,Tr]=train(net,x,t);x1=-0.77:0.05:0.78;y1=sim(net,x1);x2=0.75:0.05:0.95;%外推t2=sin(2*x2)+cos(5*x2);y2=sim(net,x2);e=y2-t2;xwc=e./t2;%相对误差figure(2)subplot(211)plot(x,t,'ko',x,t,'k-',x1,y1,'k*',x1,y1,'k-');xlabel('自变量x')ylabel('函数值')subplot(212)plot(x2,e,'k.',x2,e,'k-')xlabel('自变量x')ylabel('函数误差值e')运行结果:(2)BP 网络在故障诊断中的应用 程序:P=[0.2286 0.1292 0.0720 0.1592 0.1335 0.0733 0.1159 0.0940 0.0522 0.1345 0.0090 0.1260 0.3619 0.0690 0.1828; 0.2090 0.0947 0.1393 0.1387 0.2558 0.0900 0.0771 0.0882 0.0393 0.1430 0.0126 0.1670 0.2450 0.0508 0.1328; 0.0442 0.0880 0.1147 0.0563 0.3347 0.1150 0.1453 0.0429 0.1818 0.0378 0.0092 0.2251 0.1516 0.0858 0.0670;0.2603 0.1715 0.0702 0.2711 0.1491 0.1330 0.0968 0.1911 0.2545 0.0871 0.0060 0.1793 0.1002 0.0789 0.0909; 0.3690 0.2222 0.0562 0.5157 0.1872 0.1614 0.1425 0.1506 0.1310 0.0500 0.0078 0.0348 0.0451 0.0707 0.0880; 0.0359 0.1149 0.1230 0.5460 0.1977 0.1248 0.0624 0.0832 0.1640 0.1002 0.0059 0.1503 0.1837 0.1295 0.0700;自变量x函数值0.750.80.850.90.95自变量x函数误差值e0.1759 0.2347 0.1829 0.1811 0.2922 0.0655 0.0774 0.2273 0.2056 0.0925 0.0078 0.1852 0.3501 0.1680 0.2668;0.0724 0.1909 0.1340 0.2409 0.2842 0.0450 0.0824 0.1064 0.1909 0.1586 0.0116 0.1698 0.3644 0.2718 0.2494;0.2634 0.2258 0.1165 0.1154 0.1074 0.0657 0.0610 0.2623 0.2588 0.1155 0.0050 0.0978 0.1511 0.2273 0.3220]';T=[1 0 0;1 0 0;1 0 0;0 1 0;0 1 0;0 1 0;0 0 1;0 0 1;0 0 1]';%输入向量的最大值与最小值threshold=[0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1];net=newff(threshold,[31,3],{'tansig','l ogsig'},'trainlm');%训练次数为50,训练目标为0.001,学习速率为0.1net.trainParam.epochs=50;net.trainParam.goal=0.001;LP.lr=0.1;net=train(net,P,T);%测试数据test=[0.2593 0.1800 0.0711 0.2801 0.1501 0.1298 0.1001 0.1891 0.2531 0.0875 0.0058 0.1803 0.0992 0.0802 0.1002;0.2101 0.0950 0.1298 0.1359 0.2601 0.1001 0.0753 0.0890 0.0389 0.1451 0.0128 0.1590 0.2452 0.0512 0.1319;0.2599 0.2235 0.1201 0.1171 0.1102 0.0683 0.0621 0.2597 0.2602 0.1167 0.0048 0.1002 0.1521 0.2281 0.3205]';y=sim(net,test)运行结果:y =0.0160 0.9789 0.01010.9600 0.0234 0.03920.0161 0.0044 0.9701(3)BP网络在模式识别中的应用程序:%BP网络用血清胆固醇含量检测%prestd-对样本数据进行标准化处理%prepca-对样本数据进行主元分析%newff-生成一个新的前向神经网络%train-对BP网络进行训练%sim-对BP网络进行仿真%postreg-对仿真结果进行回归分析%加载样本数据load choles_all.matsizeofp=size(p);sizeoft=size(t);%对样本数据进行标准化处理[pn,meanp,stdp,tn,meant,stdt]=prestd(p, t);%对样本数据进行主元分析[ptrans,transMat]=prepca(pn,0.001); [R,Q]=size(ptrans);% 将样本数据划分为训练集、验证集和测试集iitst=2:4:Q;iival=4:4:Q;iitr=[1:4:Q 3:4:Q];val.P=ptrans(:,iival);%验证样本集val.T=tn(:,iival);test.P=ptrans(:,iitst);%测试样本集test.T=tn(:,iitst);ptr=ptrans(:,iitr);%训练样本集ttr=tn(:,iitr);%创建神经网络net=newff(minmax(ptr),[53],{'tansig','purelin'},'trainlm'); [net,tr]=train(net,ptr,ttr,[],[],val,te st);%绘制误差变化曲线plot(tr.epoch,tr.perf,tr.epoch,tr.vperf,':',tr.epoch,tr.tperf,'r-.') legend('Training','Validation','Test',-1);ylabel('Squard Error'); xlabel('Epoch'); %对神经网络进行仿真分析 an=sim(net,ptrans); a=poststd(an,meant,stdt);%将仿真结果与目标输出作线性回归分析 for i=1:3 figure(i+1)[m(i),b(i),r(i)]=postreg(a(i,:),t(i,:)); end运行结果:2468100.20.40.60.811.21.41.6EpochS q u a r d E r r o rTraining Validation Test2 采用2种不同的训练算法来训练BP网络,使其能够拟合某一附加有白噪声的正弦样本数据,其中样本数据可以采用下列语句生成:输入矢量:P=[-1:0.05:1];目标矢量:randn(’seed’,78341223);T=sin(2*pi*P)+0.1*randn(size(P));% NEWFF——生成一个新的前向神经网络% TRAIN——对BP 神经网络进行训练% SIM——对BP 神经网络进行仿真算法1:Trainlm(L-M优化方法)程序:%定义网络输入和期望输出P=[-1:0.05:1];randn('seed',78341223);T=sin(2*pi*P)+0.1*randn(size(P));%建立相应的BP网络net=newff(minmax(P),[3,1],{'tansig','pu relin'},'trainlm');inputWeights=net.IW{1,1};inputbias=net.b{1};% 训练网络net.trainParam.show=50;net.trainParam.lr=0.05; net.trainParam.mc=0.9; net.trainParam.epochs=1000; net.trainParam.goal=0.0001;%调用TRAINGDM算法训练BP网络net=train(net,P,T);%对BP网络进行仿真A=sim(net,P);E=A-T;M=mse(E);N=sse(E);%测试网络%结果作图 %训练曲线 figure(1) plot(T,'r'); hold on plot(A,'b.:');legend('训练样本值','BP 拟合值'); title('BP 网络训练图');xlabel('样本个数'); %训练误差 figure(2) plot(T-A,'-');title('BP 网络训练误差'); legend('训练样本误差'); ylabel('训练绝对误差'); xlabel('样本个数'); grid;运行结果:51015202530354045-1.5-1-0.50.511.5样本个数BP 网络训练图算法2trainrp (弹性学习算法) 程序:%定义网络输入和期望输出 P=[-1:0.05:1]; randn('seed',78341223);T=sin(2*pi*P)+0.1*randn(size(P)); %建立相应的BP 网络net=newff(minmax(P),[3,1],{'tansig','pu relin'},'trainrp'); inputWeights=net.IW{1,1}; inputbias=net.b{1};% 训练网络net.trainParam.show=50; net.trainParam.lr=0.05; net.trainParam.mc=0.9; net.trainParam.epochs=1000; net.trainParam.goal=0.0001;%调用TRAINGDM 算法训练BP 网络 net=train(net,P,T);%对BP 网络进行仿真 A=sim(net,P); E=A-T; M=mse(E); N=sse(E); %测试网络%结果作图 %训练曲线 figure(1) plot(T,'r'); hold on plot(A,'b.:');legend('训练样本值','BP 拟合值'); title('BP 网络训练图');xlabel('样本个数'); %训练误差 figure(2) plot(T-A,'-');title('BP 网络训练误差');51015202530354045-0.500.51BP 网络训练误差样本个数训练绝对误差legend('训练样本误差'); ylabel('训练绝对误差');xlabel('样本个数'); grid;运行结果:51015202530354045-1.5-1-0.50.511.5样本个数BP 网络训练图51015202530354045-0.8-0.6-0.4-0.200.20.40.60.8BP 网络训练误差样本个数训练绝对误差。
应用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.2 BP神经网络训练步骤BP神经网络预测前首先要训练网络,通过训练使网络具有联想记忆和预测能力。
BP神经网络的训练过程包括以下几个步骤。
步骤1:网络初始化。
根据系统输入输出序列(X,Y)确定网络输入层节点数n、隐含层节点数l、输出层节点数m,初始化输入层、隐含层和输出层神经元之间的连接权值ωij,ωjk,初始化隐含层阈值a,输出层阈值b,给定学习速率和神经元激励函数。
步骤2:隐含层输出计算。
根据输入变量X,输入层和隐含层间连接权值ωij以及隐含层阈值a,计算隐含层输出H。
j 1(a )nj ij i i H f x ω==-∑ j=1,2,…,l式中,l 为隐含层节点数,f 为隐含层激励函数,该函数有多种形式,一般选取为1(x)1xf e-=+步骤3:输出层输出计算。
根据隐含层输出H ,连接权值ωjk 和阈值b ,计算BP 神经网络预测输出O 。
1lk j jk k j O H b ω==-∑ k=1,2,…,m步骤4:误差计算。
BP网络在函数逼近中的应用BP网络由很强的映射能力,主要用于模式识别分类、函数逼近、函数压缩等。
下面将通过实例来说明BP网络在函数逼近方面的应用。
要求设计一个BP网络,逼近以下函数:g(x)=1+sin(k*pi/4*x),实现对该非线性函数的逼近。
其中,分别令k=1,2,4进行仿真,通过调节参数(如隐藏层节点个数等)得出信号的频率与隐层节点之间,隐层节点与函数逼近能力之间的关系。
步骤1:假设频率参数k=1,绘制要逼近的非线性函数的曲线。
函数的曲线如图3.2所示。
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所示。
图3.3 未训练网络的输出结果因为使用newff( )函数建立函数网络时,权值和阈值的初始化是随机的,所以网络输出结构很差,根本达不到函数逼近的目的,每次运行的结果也有时不同。
利用BP 神经网络逼近非线性函数实例1、非线性函数的表达式:非线性函数的表达式:222110sin(10)y=e x x e x x +++ 在仿真时只做x 在-1到1之间的仿真2、matlab 程序代码及其相关解释:根据BP 神经网络函数逼近原理实现对上述非线性函数进行逼近。
主要分为四部分:1是写出需要逼近的函数及其用matlab 画出相应的图形;2网络建立,主要应用到newff ()函数建立BP 网络,但是应用newff ()函数建立的网格时,它的权值和阈值的初始化是随机的,逼近效果相当的不理想;3应用train ()函数对网格进行训练已达到逼近的效果;4网格的测试,主要是把所有的函数图象在一个图上表达进行测试函数的逼近效果。
根据上述1节中非线性函数问题设计出如下的Matlab 程序:x=[-1:0.001:1];y=exp(-(1+2*x)).*(10*x.*sin(10*x)+exp(x+2));net=newff(minmax(x),[20,1],{'tansig' 'purelin'});y1=sim(net,x); %未训练网络的仿真结果figure;plot(x,y,'-',x,y1,'+')title('原函数与网络训练前的仿真结果比较');legend('y','y1');hold offnet.trainParam.epochs=50;net.trainParam.goal=0.01;net=train(net,x,y);y2=sim(net,x); %训练后网络的仿真结果figure;plot(x,y,'-',x,y2,'-.')title('原函数与网络训练后的仿真结果比较');legend('y','y2');hold offfigure;plot(x,y,'-',x,y1,'+',x,y2,'-.')title('原函数与网络训练前后的仿真结果比较');xlabel('x');ylabel('y');legend('y','y1','y2');grid on该BP神经网络只含1个隐含层,且神经元的个数为20。
燕山大学模式识别与智能系统导论题目: BP网络在函数逼近中的应用专业:控制工程姓名: X X X 学号:一BP神经网络及其原理............................................................ - 1 -1.1 BP神经网络定义............................................................. - 1 -1.2 BP神经网络模型及其基本原理..................................... - 1 -1.3 BP神经网络的主要功能................................................. - 3 -1.4 BP网络的优点以及局限性............................................. - 3 - 二基于MATLAB的BP神经网络工具箱函数 ........................ - 6 -2.1 BP网络创建函数............................................................. - 7 -2.2 神经元上的传递函数...................................................... - 7 -2.3 BP网络学习函数............................................................. - 8 -2.4 BP网络训练函数............................................................. - 9 - 三BP网络在函数逼近中的应用.............................................. - 10 -3.1 问题的提出.................................................................... - 10 -3.2 基于BP神经网络逼近函数......................................... - 10 -3.3 不同频率下的逼近效果................................................ - 14 -3.4 讨论................................................................................ - 17 -一BP神经网络及其原理1.1 BP神经网络定义BP (Back Propagation)神经网络是一种神经网络学习算法。
实验二基于BP神经网络算法的函数逼近一、引言函数逼近是神经网络应用的重要领域之一、在实际问题中,我们常常需要使用一个适当的数学函数来近似描述现象与问题之间的关系。
BP神经网络作为一种常用的函数逼近方法,具有良好的逼近性能和普适性,能够对非线性函数进行逼近,并且在实际应用中已经得到了广泛的应用。
本实验将通过BP神经网络算法对给定的函数进行逼近,验证其逼近效果和性能。
二、实验目标1.理解和掌握BP神经网络算法的基本原理和步骤;2.掌握使用BP神经网络进行函数逼近的方法;3.通过实验验证BP神经网络在函数逼近中的性能。
三、实验步骤1.准备数据集选择一个待逼近的非线性函数,生成一组训练数据和测试数据。
训练数据用于训练神经网络模型,测试数据用于评估逼近效果。
2.构建神经网络模型根据待逼近的函数的输入和输出维度,确定神经网络的输入层和输出层的神经元个数,并选择适当的激活函数和损失函数。
可以根据实际情况调整隐藏层的神经元个数,并添加正则化、dropout等技术来提高模型的泛化能力。
3.初始化网络参数对于神经网络的参数(权重和偏置)进行随机初始化,通常可以采用均匀分布或高斯分布来初始化。
4.前向传播和激活函数通过输入数据,进行前向传播计算,得到网络的输出值,并通过激活函数将输出值映射到合适的范围内。
5.计算损失函数根据网络的输出值和真实值,计算损失函数的值,用于评估模型的训练效果。
6.反向传播和权重更新通过反向传播算法,计算各个参数的梯度,根据学习率和梯度下降算法更新网络的参数。
7.循环迭代训练重复以上步骤,直至达到预设的训练停止条件(如达到最大迭代次数或损失函数满足收敛条件)。
8.模型测试和评估使用测试数据评估训练好的模型的逼近效果,可以计算出逼近误差和准确度等指标来评估模型的性能。
四、实验结果通过对比逼近函数的真实值和模型的预测值,可以得到模型的逼近效果。
同时,通过计算逼近误差和准确度等指标来评估模型的性能。
第28卷第10期兵工自动化Vol. 28, No. 10 2009年10月Ordnance Industry Automation Oct. 2009doi: 10.3969/j.issn.1006-1576.2009.10.029几种用于非线性函数逼近的神经网络方法研究黄忠明1,吴志红1,刘全喜2(1. 四川大学计算机学院,四川成都610065;2. 西南技术物理研究所,四川成都610064)摘要:采用一个较小的学习率,在都满足相同误差指标的情况下,通过应用几种比较有代表性的BP网络,RBF 网络和Elman网络逼近一非线性函数,得出各种不同的网络结构和训练算法对逼近结果的影响。
L-M算法训练所需时间少,逼近精度较高。
弹性BP算法的前向网络能消除梯度幅度的不利影响。
变梯度SCG算法不需在迭代中进行线性搜索,从而避免搜索方向计算的耗时问题。
径向基函数网络对于输入信号具有很好的局部逼近能力,对反馈型Elman网络而言,虽然其逼近效果也能满足误差指标的要求,但其训练所需的步数和时间却很长。
关键词:函数逼近;神经网络;建模与仿真;性能分析中图分类号:O174.41; TP182 文献标识码:AResearch on Several Neural Network Methods Applied inNonlinear Function ApproximationHUANG Zhong-ming1, WU Zhi-hong1, LIU Quan-xi2(1.College of Computer, Sichuan University, Chengdu 610065, China;2. Southwest Institute of Technical Physics, Chengdu 610064, China)Abstract: With same error index, a lesser learning rate is adopted, several typically familiar methods of the BP network, RBF network and the Elman network are applied to investigate the nonlinear function approximation. And the influence of the different network structure and training arithmetic on approximation result is obtained. L-M arithmetic time less of training is requires and higher approximation accuracy. The former network of the stretch BP arithmetic can eliminate the adverse effect of the gradient magnitude. The changing gradient SCG arithmetic without linear search in the iteration, hence avoid the time-consuming problem of the search direction calculation. Radial basis function network has a good local approximation ability of the input signal. The approximation effect of the feedback Elman network can meet the request of the error index, but its training requires long steps and time.Keywords: Function approximation; Neural network; Modeling and simulation; Performance analysis0 引言函数逼近问题是神经网络研究的基本问题之一,对于经典的函数逼近理论,理论分析严格、体系成熟。
BP神经网络在非线性函数逼近中的应用摘要:人工神经网络(Artificial Neural Networks,NN)是由大量的、简单的处理单元(称为神经元)广泛地互相连接而形成的复杂网络系统,它反映了人脑功能的许多基本特征,是一个高度复杂的非线性动力学系统。
神经网络具有大规模并行、分布式存储和处理、自组织、自适应和自学习能力,特别适合处理需要同时考虑许多因素和条件的、不精确和模糊的信息处理问题。
神经网络的发展与神经科学、数理科学、认知科学、计算机科学、人工智能、信息科学、控制论、机器人学、微电子学、心理学、微电子学、心理学、光计算、分子生物学等有关,是一门新兴的边缘交叉学科。
BP神经网络有很强的映射能力,主要用于模式识别分类、函数逼近、函数压缩等。
下面将介绍来说明BP神经网络在函数逼近方面的应用。
一、前言人工神经网络是由具有适应性的简单单元组成的广泛并行互连的网络,它的组织能够模拟生物神经系统对真实世界物体所作出的交互反应。
人工神经网络就是模拟人思维的一种方式,是一个非线性动力学系统,其特色在于信息的分布式存储和并行协同处理。
虽然单个神经元的结构极其简单,功能有限,但大量神经元构成的网络系统所能实现的行为却是极其丰富多彩的。
近年来通过对人工神经网络的研究,可以看出神经网络的研究目的和意义有以下三点:1、通过揭示物理平面与认知平面之间的映射,了解它们相互联系和相互作用的机理,从而揭示思维的本质,探索智能的本源。
2、争取构造出尽可能与人脑具有相似功能的计算机,即神经网络计算机。
3、研究仿照脑神经系统的人工神经网络,将在模式识别、组合优化和决策判断等方面取得传统计算机所难以达到的效果。
人工神经网络特有的非线性适应性信息处理能力,克服了传统人工智能方法对于直觉,如模式、语音识别、非结构化信息处理方面的缺陷,使之在神经专家系统、模式识别、智能控制、组合优化、预测等领域得到成功应用。
人工神经网络与其它传统方法相结合,将推动人工智能和信息处理技术不断发展。
智能技术实验三-BP程序的算法设计1熟悉BP网络的基本训练算法程序,练习课件上的相关程序。
(1)用BP网络逼近非线性函数f(x)=sin2x+cos5x程序:x=-0.8:0.05:0.75;t=sin(2*x)+cos(5*x);net=newff(minmax(x),[12,1],{'tansig','purelin'},'trainbfg','learngdm','sse');%利用准牛顿反向传播算法对网络进行训练,动量梯度下降权值与阈值的学习net.trainParam.epochs=1500;%训练步数net.trainParam.goal=0;%训练目标误差net.trainParam.lr=1.42;%学习速率net.trainParam.show=100;%现实训练结果的间隔步数[net,Tr]=train(net,x,t);x1=-0.77:0.05:0.78;y1=sim(net,x1);x2=0.75:0.05:0.95;%外推t2=sin(2*x2)+cos(5*x2);y2=sim(net,x2);e=y2-t2;xwc=e./t2;%相对误差figure(2)subplot(211)plot(x,t,'ko',x,t,'k-',x1,y1,'k*',x1,y1,'k-');xlabel('自变量x')ylabel('函数值')subplot(212)plot(x2,e,'k.',x2,e,'k-')xlabel('自变量x')ylabel('函数误差值e')运行结果:(2)BP 网络在故障诊断中的应用 程序:P=[0.2286 0.1292 0.0720 0.1592 0.1335 0.0733 0.1159 0.0940 0.0522 0.1345 0.0090 0.1260 0.3619 0.0690 0.1828; 0.2090 0.0947 0.1393 0.1387 0.2558 0.0900 0.0771 0.0882 0.0393 0.1430 0.0126 0.1670 0.2450 0.0508 0.1328; 0.0442 0.0880 0.1147 0.0563 0.3347 0.1150 0.1453 0.0429 0.1818 0.0378 0.0092 0.2251 0.1516 0.0858 0.0670;0.2603 0.1715 0.0702 0.2711 0.1491 0.1330 0.0968 0.1911 0.2545 0.0871 0.0060 0.1793 0.1002 0.0789 0.0909; 0.3690 0.2222 0.0562 0.5157 0.1872 0.1614 0.1425 0.1506 0.1310 0.0500 0.0078 0.0348 0.0451 0.0707 0.0880; 0.0359 0.1149 0.1230 0.5460 0.1977 0.1248 0.0624 0.0832 0.1640 0.1002 0.0059 0.1503 0.1837 0.1295 0.0700;自变量x函数值0.750.80.850.90.95自变量x函数误差值e0.1759 0.2347 0.1829 0.1811 0.2922 0.0655 0.0774 0.2273 0.2056 0.0925 0.0078 0.1852 0.3501 0.1680 0.2668;0.0724 0.1909 0.1340 0.2409 0.2842 0.0450 0.0824 0.1064 0.1909 0.1586 0.0116 0.1698 0.3644 0.2718 0.2494;0.2634 0.2258 0.1165 0.1154 0.1074 0.0657 0.0610 0.2623 0.2588 0.1155 0.0050 0.0978 0.1511 0.2273 0.3220]';T=[1 0 0;1 0 0;1 0 0;0 1 0;0 1 0;0 1 0;0 0 1;0 0 1;0 0 1]';%输入向量的最大值与最小值threshold=[0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1];net=newff(threshold,[31,3],{'tansig','l ogsig'},'trainlm');%训练次数为50,训练目标为0.001,学习速率为0.1net.trainParam.epochs=50;net.trainParam.goal=0.001;LP.lr=0.1;net=train(net,P,T);%测试数据test=[0.2593 0.1800 0.0711 0.2801 0.1501 0.1298 0.1001 0.1891 0.2531 0.0875 0.0058 0.1803 0.0992 0.0802 0.1002;0.2101 0.0950 0.1298 0.1359 0.2601 0.1001 0.0753 0.0890 0.0389 0.1451 0.0128 0.1590 0.2452 0.0512 0.1319;0.2599 0.2235 0.1201 0.1171 0.1102 0.0683 0.0621 0.2597 0.2602 0.1167 0.0048 0.1002 0.1521 0.2281 0.3205]';y=sim(net,test)运行结果:y =0.0160 0.9789 0.01010.9600 0.0234 0.03920.0161 0.0044 0.9701(3)BP网络在模式识别中的应用程序:%BP网络用血清胆固醇含量检测%prestd-对样本数据进行标准化处理%prepca-对样本数据进行主元分析%newff-生成一个新的前向神经网络%train-对BP网络进行训练%sim-对BP网络进行仿真%postreg-对仿真结果进行回归分析%加载样本数据load choles_all.matsizeofp=size(p);sizeoft=size(t);%对样本数据进行标准化处理[pn,meanp,stdp,tn,meant,stdt]=prestd(p, t);%对样本数据进行主元分析[ptrans,transMat]=prepca(pn,0.001); [R,Q]=size(ptrans);% 将样本数据划分为训练集、验证集和测试集iitst=2:4:Q;iival=4:4:Q;iitr=[1:4:Q 3:4:Q];val.P=ptrans(:,iival);%验证样本集val.T=tn(:,iival);test.P=ptrans(:,iitst);%测试样本集test.T=tn(:,iitst);ptr=ptrans(:,iitr);%训练样本集ttr=tn(:,iitr);%创建神经网络net=newff(minmax(ptr),[53],{'tansig','purelin'},'trainlm'); [net,tr]=train(net,ptr,ttr,[],[],val,te st);%绘制误差变化曲线plot(tr.epoch,tr.perf,tr.epoch,tr.vperf,':',tr.epoch,tr.tperf,'r-.') legend('Training','Validation','Test',-1);ylabel('Squard Error'); xlabel('Epoch'); %对神经网络进行仿真分析 an=sim(net,ptrans); a=poststd(an,meant,stdt);%将仿真结果与目标输出作线性回归分析 for i=1:3 figure(i+1)[m(i),b(i),r(i)]=postreg(a(i,:),t(i,:)); end运行结果:2468100.20.40.60.811.21.41.6EpochS q u a r d E r r o rTraining Validation Test2 采用2种不同的训练算法来训练BP网络,使其能够拟合某一附加有白噪声的正弦样本数据,其中样本数据可以采用下列语句生成:输入矢量:P=[-1:0.05:1];目标矢量:randn(’seed’,78341223);T=sin(2*pi*P)+0.1*randn(size(P));% NEWFF——生成一个新的前向神经网络% TRAIN——对BP 神经网络进行训练% SIM——对BP 神经网络进行仿真算法1:Trainlm(L-M优化方法)程序:%定义网络输入和期望输出P=[-1:0.05:1];randn('seed',78341223);T=sin(2*pi*P)+0.1*randn(size(P));%建立相应的BP网络net=newff(minmax(P),[3,1],{'tansig','pu relin'},'trainlm');inputWeights=net.IW{1,1};inputbias=net.b{1};% 训练网络net.trainParam.show=50;net.trainParam.lr=0.05; net.trainParam.mc=0.9; net.trainParam.epochs=1000; net.trainParam.goal=0.0001;%调用TRAINGDM算法训练BP网络net=train(net,P,T);%对BP网络进行仿真A=sim(net,P);E=A-T;M=mse(E);N=sse(E);%测试网络%结果作图 %训练曲线 figure(1) plot(T,'r'); hold on plot(A,'b.:');legend('训练样本值','BP 拟合值'); title('BP 网络训练图');xlabel('样本个数'); %训练误差 figure(2) plot(T-A,'-');title('BP 网络训练误差'); legend('训练样本误差'); ylabel('训练绝对误差'); xlabel('样本个数'); grid;运行结果:51015202530354045-1.5-1-0.50.511.5样本个数BP 网络训练图算法2trainrp (弹性学习算法) 程序:%定义网络输入和期望输出 P=[-1:0.05:1]; randn('seed',78341223);T=sin(2*pi*P)+0.1*randn(size(P)); %建立相应的BP 网络net=newff(minmax(P),[3,1],{'tansig','pu relin'},'trainrp'); inputWeights=net.IW{1,1}; inputbias=net.b{1};% 训练网络net.trainParam.show=50; net.trainParam.lr=0.05; net.trainParam.mc=0.9; net.trainParam.epochs=1000; net.trainParam.goal=0.0001;%调用TRAINGDM 算法训练BP 网络 net=train(net,P,T);%对BP 网络进行仿真 A=sim(net,P); E=A-T; M=mse(E); N=sse(E); %测试网络%结果作图 %训练曲线 figure(1) plot(T,'r'); hold on plot(A,'b.:');legend('训练样本值','BP 拟合值'); title('BP 网络训练图');xlabel('样本个数'); %训练误差 figure(2) plot(T-A,'-');title('BP 网络训练误差');51015202530354045-0.500.51BP 网络训练误差样本个数训练绝对误差legend('训练样本误差'); ylabel('训练绝对误差');xlabel('样本个数'); grid;运行结果:51015202530354045-1.5-1-0.50.511.5样本个数BP 网络训练图51015202530354045-0.8-0.6-0.4-0.200.20.40.60.8BP 网络训练误差样本个数训练绝对误差。