bp神经网络进行多项式函数的逼近 吐血推荐1
- 格式:pdf
- 大小:362.95 KB
- 文档页数:20
控制系统仿真与模型处理设计报告(采用BP神经网络完成非线性函数的逼近)1、题目要求:(1)确定一种神经网络、网络结构参数和学习算法。
(2)选择适当的训练样本和检验样本,给出选取方法。
(3)训练网络使学习目标误差函数达到0.01,写出学习结束后的网络各参数,并绘制学习之前、第100次学习和学习结束后各期望输出曲线、实际输出曲线。
绘制网络训练过程的目标误差函数曲线。
(4)验证网络的泛化能力,给出网络的泛化误差。
绘制网络检验样本的期望输出曲线和网络输出曲线。
(5)分别改变神经网络的中间节点个数、改变网络的层数、改变学习算法进行比较实验,讨论系统的逼近情况,给出你自己的结论和看法。
2、设计方案:在MATLAB中建立M文件下输入如下命令:x=[0:0.01:1];y=2.2*power(x-0.25,2)+sin(5*pi*x);plot(x,y)xlabel('x');ylabel('y');title('非线性函数');得到如下图形,即所给的非线性函数曲线图:构造一个1-7-1的BP神经网络,第一层为输入层,节点个数为1;第二层为隐层,节点个数为7;变换函数选正切s型函数(tansig);第三层为输出层,节点个数为1,输出层神经元传递函数为purelin函数。
并且选Levenberg-Marquardt算法(trainlm)为BP网络的学习算法。
对于该初始网络,我们选用sim()函数观察网络输出。
继续在M函数中如下输入。
net=newff(minmax(x),[1,7,1],{'tansig','tansig','purelin'},'trainlm'); y1=sim(net,x);figure;plot(x,y,'b',x,y1,'r')title('期望输出与实际输出比较');xlabel('t');则得到以下所示训练的BP网络期望输出与实际输出曲线比较:应用函数train()对网络进行训练之前,需要预先设置训练参数。
多元连续函数的多项式逼近
多项式逼近是一种基于最小二乘拟合的数值分析算法,可用来进行多元连续函
数的拟合和估计。
它能够有效地分析大量样本数据,从而获得函数模型,并得到函数形式表示中的各项系数。
因此,多项式逼近可用于统计分析、曲线拟合,以及机器学习的多元函数建模等场景中。
传统上,多项式逼近主要分为一阶和二阶多项式逼近。
一阶多项式逼近是指将
多元函数逼近为一次函数的过程,其中多元函数只有一阶项,而不包括二阶及以上的项。
而二阶多项式逼近则是将多元函数逼近为二次函数的过程,其中多元函数除一阶项外,还包括二阶以及以上项。
在数据挖掘领域,多项式逼近在多元函数建模中被普遍应用,尤其是用于拟合
具有非线性特性的数据。
这种算法能够从数据中捕捉局部变化,并有效地拟合复杂的数据关系,以获得更加准确的数学模型。
同时,多项式逼近也有利于提升模型的准确性和可靠性,有助于进一步提高模型的预测效率。
此外,多项式逼近还可以用于解决多元非线性函数优化问题,即通过多项式逼
近来求函数的最优解。
通过该方法,可以将极端复杂的函数拆分为相对简单的模型,从而减少优化过程当中的计算复杂性。
总的来说,多项式逼近是一种非常重要的数值分析算法,可用于多元连续函数
的拟合和估计,在数据挖掘领域有着广泛的应用。
未来,随着数据挖掘技术的不断发展,多项式逼近在优化问题中的应用也将受到更多关注,并有望带来更多的发现。
BP神经网络的基本原理_一看就懂BP神经网络(Back Propagation Neural Network)是一种常用的人工神经网络模型,用于解决分类、回归和模式识别问题。
它的基本原理是通过反向传播算法来训练和调整网络中的权重和偏置,以使网络能够逐渐逼近目标输出。
1.前向传播:在训练之前,需要对网络进行初始化,包括随机初始化权重和偏置。
输入数据通过输入层传递到隐藏层,在隐藏层中进行线性加权和非线性激活运算,然后传递给输出层。
线性加权运算指的是将输入数据与对应的权重相乘,然后将结果进行求和。
非线性激活指的是对线性加权和的结果应用一个激活函数,常见的激活函数有sigmoid函数、ReLU函数等。
激活函数的作用是将线性运算的结果映射到一个非线性的范围内,增加模型的非线性表达能力。
2.计算损失:将网络输出的结果与真实值进行比较,计算损失函数。
常用的损失函数有均方误差(Mean Squared Error)和交叉熵(Cross Entropy)等,用于衡量模型的输出与真实值之间的差异程度。
3.反向传播:通过反向传播算法,将损失函数的梯度从输出层传播回隐藏层和输入层,以便调整网络的权重和偏置。
反向传播算法的核心思想是使用链式法则。
首先计算输出层的梯度,即损失函数对输出层输出的导数。
然后将该梯度传递回隐藏层,更新隐藏层的权重和偏置。
接着继续向输入层传播,直到更新输入层的权重和偏置。
在传播过程中,需要选择一个优化算法来更新网络参数,常用的优化算法有梯度下降(Gradient Descent)和随机梯度下降(Stochastic Gradient Descent)等。
4.权重和偏置更新:根据反向传播计算得到的梯度,使用优化算法更新网络中的权重和偏置,逐步减小损失函数的值。
权重的更新通常按照以下公式进行:新权重=旧权重-学习率×梯度其中,学习率是一个超参数,控制更新的步长大小。
梯度是损失函数对权重的导数,表示了损失函数关于权重的变化率。
《BP及RBP神经网络逼近、药品销售预测、基本遗传算法设计实验》实验指导书雷菊阳编机械工程学院2012年6月实验一、BP及RBP神经网络逼近一、实验目的1、了解MATLAB集成开发环境2、了解MATLAB编程基本方法3、加深对BP算法的理解和掌握4、掌握工具包入口初始化及调用5、加深BP、RBP神经网络对任意函数逼近的理解二、实验内容1、MATLAB基本指令和语法。
2、BP算法的MATLAB实现三、实验步骤1、熟悉MATLAB开发环境2、输入参考程序3、设置断点,运行程序,观察运行结果四、参考程序1、BP算法的matlab实现程序%lr为学习步长,err_goal期望误差最小值,max_epoch训练的最大次数,隐层和输出层初值为零lr=0.05;err_goal=0.01;max_epoch=3000;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);-4-3-2-10123400.511.522.533.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);-4-3-2-101234-4-3-2-1012342468101214五、思考题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 网络训练误差样本个数训练绝对误差。
函数逼近的几种算法及其应用函数逼近是数值计算中的一种重要技术,用于在给定的函数空间中找到与目标函数最相近的函数。
函数逼近算法可以在不知道目标函数解析表达式的情况下,通过对给定数据进行处理来逼近目标函数的结果。
这篇文章将介绍几种常见的函数逼近算法及其应用。
1.多项式逼近:多项式逼近是一种利用多项式函数逼近目标函数的方法。
多项式逼近算法有很多种,常见的有最小二乘法、拉格朗日插值法和牛顿插值法等。
多项式逼近广泛应用于数据拟合、信号处理和图像处理等领域。
最小二乘法是一种通过最小化实际观测值与多项式模型之间的差异来确定多项式系数的方法。
最小二乘法可以用于拟合非线性和线性函数。
拉格朗日插值法和牛顿插值法是通过插值多项式来逼近目标函数的方法,可以用于填充缺失数据或者生成曲线过程中的中间点。
2.三角函数逼近:三角函数逼近是一种利用三角函数来逼近目标函数的方法。
三角函数逼近算法有傅里叶级数逼近和小波变换等。
傅里叶级数逼近是一种利用三角函数的线性组合来逼近目标函数的方法。
这种方法广泛应用于信号处理、图像处理和数学建模等领域。
小波变换是一种通过特定的基函数来逼近目标函数的方法。
小波变换可以用于信号去噪、图像压缩和模式识别等应用。
3.插值逼近:插值逼近是一种通过已知数据点在给定区间内的函数值来确定目标函数的方法。
常见的插值逼近方法有拉格朗日插值法、牛顿插值法和差值多项式法等。
插值逼近广泛应用于任何需要通过已知数据点来逼近目标函数的领域。
在实际应用中,函数逼近常用于数据分析和模型构建。
例如,在金融领域,函数逼近可以用于确定股票价格走势的模型和预测。
在工程领域,函数逼近可以用于建立复杂系统的模型和优化控制。
在计算机图形学领域,函数逼近可以用于生成真实感图像和动画。
总结起来,函数逼近是一种重要的数值计算技术,有多种算法可供选择。
多项式逼近、三角函数逼近和插值逼近是常见的函数逼近算法。
函数逼近广泛应用于数据分析、模型构建和优化控制等领域,对于解决实际问题具有重要作用。
bp使用方法BP(反向传播算法)是一种用于训练神经网络的算法。
它通过反向传播误差来调整神经网络中的权重和偏差,以使其能够更好地逼近目标函数。
BP算法是一种有监督学习算法,它需要有标记的训练集作为输入,并且可以通过梯度下降法来最小化目标函数的误差。
BP算法的基本思想是在神经网络中,从输入层到输出层的正向传播过程中,通过计算网络的输出值与目标值之间的差异(即误差),然后将这个误差反向传播到网络的每一层,在每一层中调整权重和偏差,以最小化误差。
这个反向传播的过程将误差逐层传递,使得网络的每一层都能对误差进行一定程度的“贡献”,并根据这个贡献来调整自己的权重和偏差。
具体来说,BP算法可以分为以下几个步骤:1. 初始化网络:首先需要确定神经网络的结构,包括输入层、隐藏层和输出层的神经元个数,以及每层之间的连接权重和偏差。
这些权重和偏差可以初始化为随机值。
2. 前向传播:将输入样本送入网络,按照从输入层到输出层的顺序,逐层计算每个神经元的输出值。
具体计算的方法是将输入值和各个连接的权重相乘,然后将结果求和,并通过一个非线性激活函数(如Sigmoid函数)进行映射得到最终的输出值。
3. 计算误差:将网络的输出值与目标值进行比较,计算误差。
常用的误差函数有均方误差函数(Mean Squared Error,MSE)和交叉熵函数(Cross Entropy),可以根据具体问题选择合适的误差函数。
4. 反向传播:从输出层开始,根据误差对权重和偏差进行调整。
首先计算输出层神经元的误差,然后根据误差和激活函数的导数计算输出层的敏感度(即对权重的影响),并根据敏感度和学习率更新输出层的权重和偏差。
5. 更新隐藏层权重:同样地,根据输出层的敏感度,计算隐藏层的敏感度,并更新隐藏层的权重和偏差。
隐藏层的敏感度可以通过将输出层的敏感度按权重加权求和得到。
6. 重复步骤4和5:重复执行步骤4和5,将误差逐层传播,更新每一层的权重和偏差,直到达到训练的停止条件(如达到最大迭代次数或误差降至某个阈值)。
BP 神经网络与多项式拟合曲线摘要 首先介绍了曲线拟合的原理及其在曲线拟合中的应用。
接着讨论了BP 神经网络的原理,研究了非线性拟合的在MATLAB 中仿真过程 通过比较可以看出利用神经网络进行非线性拟合具有拟合速度快、拟合精度高的特点。
关键词:曲线拟合;BP 神经网络;MATLAB0 引言在实际工程应用和科学实践中,为了描述不同变量之间的关系,需要根据一组测定的数据去求得自变量x 和因变量y 的一个函数关系)(x f y =,使其在某种准则下最佳地接近已知数据。
曲线拟合是用连续曲线近似地刻画或比拟平面上离散点组所表示坐标之间的函数关系的一种数据处理方法。
从一组实验数据(i i y x ,) 中寻求自变量x 和因变量y 之间的函数关系)(x f y =来反映x 和y 之间的依赖关系,即在一定意义下最佳地逼近已知数据。
应用曲线拟合的方法揭示数据之间内在规律具有重要的理论和现实意义。
1 多项式曲线拟合 1.1 曲线拟合原理最小二乘法原理:对给定的数据点(i i y x ,)(N i ,...,2,1=),在取定的函数类φ中,求函数φ∈)(x f ,使误差i i y x f -)((N i ,...,1,0=)的平方和最小,即[]∑=-Ni iiy x f 02)(取到最小值。
从几何意义上讲,就是寻求与给定点(i i y x ,)(N i ,...,2,1=)的距离平方和为最小的曲线)(x f y =。
函数)(x f 称为拟合函数或最小二乘解,求拟合函数)(x f 的方法称为曲线拟合的最小二乘法。
拟合函数和标志数据点之间的垂直距离是该点的误差。
对该数据点垂直距离求平方,并把平方距离全加起来,拟合曲线应是使误差平方和尽可能小的曲线,即是最佳拟合。
1.2 最小二乘法曲线拟合对非线性函数)+=,进行曲线拟合。
xy-16ex p(22x1.2.1 拟合过程选取拟合区间为-5:0.1:5.用10阶、30阶不同阶数对函数进行拟合,绘制出拟合曲线图,比对拟合效果差异。
三.BP神经⽹络 BP神经⽹络是包含多个隐含层的⽹络,具备处理线性不可分问题的能⼒。
以往主要是没有适合多层神经⽹络的学习算法,,所以神经⽹络的研究⼀直处于低迷期。
20世纪80年代中期,Rumelhart,McClelland等成⽴了Parallel Distributed Procession(PDP)⼩组,提出了著名的误差反向传播算法(Error Back Propagtion,BP)。
BP和径向基⽹络属于多层前向神经⽹络。
⼴泛应⽤于分类识别、逼近、回归、压缩等领域。
BP神经⽹络(强调是⽤BP算法)⼀般是多层的,其概念和多层感知器(强调多层)差不多是等价的,隐层可以是⼀层或多层。
BP神经⽹络具有如下特点:(1)⽹络由多层构成,层与层之间全连接,同⼀层之间的神经元⽆连接。
(2)BP⽹络的传递函数必须可微。
所以感知器的⼆值函数不能⽤,⼀般采⽤Sigmoid函数,可分为Log-Sigmoid和Tan-Sigmoid函数。
其中x的范围包含整个实数域,函数值再0~1之间。
具体应⽤时可以增加参数,以控制曲线的位置和形状。
sigmoid函数可以将输⼊从负⽆穷到正⽆穷的范围映射到(-1,1)和(0,1)之间,在原点处具有⾮线性放⼤功能。
BP的典型设计是隐含层采⽤Sigmoid函数作为传递函数,输出层采⽤线性函数作为传递函数。
(⼀定不能全部层都采⽤线性的,否则就会和线性神经⽹络⼀样了)(3)采⽤误差反向传播算法(Back-Propagation)进⾏学习。
再BP⽹络中,数据从输⼊层经隐含层逐层向后传播,训练⽹络权值时,则沿着减少误差的⽅向,从输出层经过中间各层逐层向前修正⽹络连接权值。
(与反馈神经⽹络不同,BP是误差信号反向传播,⽹络根据误差从后向前逐层进⾏修正)(1)⽹络由多层构成,层与层之间全连接,同⼀层之间的神经元⽆连接。
(2)BP⽹络的传递函数必须可微。
所以感知器的⼆值函数不能⽤,⼀般采⽤Sigmoid函数,可分为Log-Sigmoid和Tan-Sigmoid函数。
神经网络及应用实验报告院系:电气工程学院班级:adf3班姓名:adsf学号:20sdf实验二、基于BP网络的多层感知器一:实验目的:1.理解多层感知器的工作原理2.通过调节算法参数了解参数的变化对于感知器训练的影响3.了解多层感知器局限性二:实验原理:BP的基本思想:信号的正向传播误差的反向传播–信号的正向传播:输入样本从输入层传入,经各隐层逐层处理后,传向输出层。
–误差的反向传播:将输入误差以某种形式通过隐层向输入层逐层反传,并将误差分摊给各层的所有单元,从而获得各层单元的误差信号来作为修正各单元权值的依据。
1.基本BP算法的多层感知器模型:2.BP学习算法的推导:当网络输出与期望输出不等时,存在输出误差E将上面的误差定义式展开至隐层,有进一步展开至输入层,有调整权值的原则是使误差不断地减小,因此应使权值的调整量与误差的梯度下降成正比,即η∈(0,1)表示比例系数,在训练中反应学习速率BP算法属于δ学习规则类,这类算法被称为误差的梯度下降(Gradient Descent)算法。
三:实验内容:Hermit多项式如下式所示:f(x)=1.1(1-x+2x^2)exp(-x^2/2)采用BP算法设计一个单输入单输出的多层感知器对该函数进行逼近。
训练样本按以下方法产生:样本数P=100,其中输入样本xi服从区间[-4,4]内的均匀分布,样本输出为F(xi)+ei,ei为添加的噪声,服从均值为0,标准差为0.1的正态分布。
隐层采用Sigmoid激活函数f(x)=1/(1+1/e^x),输出层采用线性激活函数f(x)=x。
注意:输出层采用的线性激活函数,不是Sigmoid激活函数,所以迭代公式需要根据前面的推导过程重新推导。
四:实验步骤:1.用Matlab编程,实现解决该问题的单样本训练BP网络,设置一个停止迭代的误差Emin和最大迭代次数。
在调试过程中,通过不断调整隐层节点数,学习率η,找到收敛速度快且误差小的一组参数。
产生均匀分布在区间[-4,4]的测试样本,输入建立的模型得到输出,与Hermit多项式的期望输出进行比较计算总误差(运行5次,取平均值),并记录下每次迭代结束时的迭代次数。
(要求误差计算使用RME,Emin设置为0.1)2.实现解决该问题的批处理训练BP网络,调整参数如上。
产生均匀分布在区间[-4,4]的测试样本,输入建立的模型得到输出,与Hermit多项式的期望输出进行比较计算总误差(运行5次,取平均值),并记录下每次迭代结束时的迭代次数。
3.对批处理训练BP算法增加动量项ΔW(t)=ηδX+αΔW(t-1),α∈(0,1),调整参数如上,记录结果,并与没有带动量项的批处理训练BP算法的结果相比较。
4.对批处理BP算法改变参数:学习率η、迭代次数、隐层节点数,观察算法的收敛发散,以及测试误差的变化(对每个参数取几个不同参数,分别运行5次,结果取平均值)。
五:实验程序:(一):单样本训练BP网络function[epoch,s,Wki,Wij,Wb,Ez]=dyb(lr,Emin,q)%初始化;%lr学习效率;Emin为期望误差最小值;q为隐含层节点数;b=1;sum=0;Ez=[];max_epoch=30000;%max_epoch训练的最大次数;%提供训练集和目标值;x=8.*rand(1,100)-4;y=1.1.*(1-x+2.*x.^2).*exp(-x.^2/2)+0.1*rand(1,100);%初始化Wki,Wij;Wij=rand(1,q);Wki=rand(1,q);Wb=rand(1,q);for epoch=1:max_epochE=0;m=1;oi=0;ok=0;%置隐含层和输出层各神经元输出初值为零;for m=1:100%计算隐含层各神经元输出;NETi=x(m)*Wij+b*Wb;for t=1:qoi(t)=1/(1+exp(-NETi(t)));end%计算输出层各神经元输出;NETk=Wki*oi';ok=NETk;%计算误差;E=E+(y(m)-ok)^2;%调整输出层加权系数;deltak=y(m)-ok;Wki=Wki+lr*deltak*oi;%调整隐含层加权系数;deltai=oi.*(1-oi).*(deltak*Wki);Wij=Wij+lr.*deltai.*x(m);Wb=Wb+lr.*deltai;endEz(epoch)=sqrt(E/100);if Ez(epoch)<Eminbreak;endend%计算测试输出;x=linspace(-4,4,100);%给定输入:y=1.1.*(1-x+2.*x.^2).*exp(-x.^2/2)+0.1*rand(1,100);for i=1:100NETi=x(i).*Wij+b*Wb;NETk=0;for t=1:qoi(t)=1/(1+exp(-NETi(t)));NETk=NETk+Wki(t)*oi(t);endok(i)=NETk;sum=sum+(y(i)-ok(i))^2;%输出总误差;ends=sqrt(sum/100);(二):批处理训练BP网络function[epoch,s,Wki,Wij,Wb,Ez]=pcl(lr,Emin,q)%初始化;%lr学习效率;Emin为期望误差最小值;q为隐含层节点数;b=1;sum=0;Ez=[];max_epoch=30000;%max_epoch训练的最大次数;%提供训练集和目标值;x=8.*rand(1,100)-4;y=1.1.*(1-x+2.*x.^2).*exp(-x.^2/2)+0.1*rand(1,100);%初始化Wki,Wij;Wij=rand(1,q);Wki=rand(1,q);Wb=rand(1,q);for epoch=1:max_epochE=0;m=1;cWki=0;cWij=0;cWb=0;%置隐含层和输出层各神经元输出初值为零;for m=1:100%计算隐含层各神经元输出;NETi=x(m)*Wij+b*Wb;for t=1:qoi(t)=1/(1+exp(-NETi(t)));end%计算输出层各神经元输出;NETk=Wki*oi';ok=NETk;%计算误差;E=E+(y(m)-ok)^2;%累加输出层加权系数;deltak=y(m)-ok;Wki=Wki+lr*deltak*oi;cWki=cWki+deltak*oi;%累加隐含层加权系数;deltai=oi.*(1-oi).*(deltak*Wki);Wij=Wij+lr.*deltai.*x(m);Wb=Wb+lr.*deltai;cWij=cWij+deltai.*x(m);cWb=cWb+deltai;end%调整输出层加权系数;Wki=Wki+lr/100*cWki;%调整隐含层加权系数;Wij=Wij+lr/100.*cWij;Wb=Wb+lr/100.*cWb;%判断误差;Ez(epoch)=sqrt(E/100);if Ez(epoch)<Eminbreak;endend%计算测试输出;x=linspace(-4,4,100);%给定输入:y=1.1.*(1-x+2.*x.^2).*exp(-x.^2/2)+0.1*rand(1,100); for i=1:100NETi=x(i).*Wij+b*Wb;NETk=0;for t=1:qoi(t)=1/(1+exp(-NETi(t)));NETk=NETk+Wki(t)*oi(t);endok(i)=NETk;sum=sum+(y(i)-ok(i))^2;%输出总误差;ends=sqrt(sum/100);(三):增加动量项的批处理训练BP网络function[epoch,s,Wki,Wij,Wb,Ez]=dlpcl(lr,Emin,q) %初始化;%lr学习效率;Emin为期望误差最小值;q为隐含层节点数;b=1;g=0;h=0;n=rand(1,1);sum=0;Ez=[];max_epoch=30000;%max_epoch训练的最大次数;%提供训练集和目标值;x=8.*rand(1,100)-4;y=1.1.*(1-x+2.*x.^2).*exp(-x.^2/2)+0.1*rand(1,100);%初始化Wki,Wij;Wij=rand(1,q);Wki=rand(1,q);Wb=rand(1,q);for epoch=1:max_epochE=0;m=1;cWki=0;cWij=0;cWb=0;%置隐含层和输出层各神经元输出初值为零;for m=1:100%计算隐含层各神经元输出;NETi=x(m)*Wij+b*Wb;for t=1:qoi(t)=1/(1+exp(-NETi(t)));end%计算输出层各神经元输出;NETk=Wki*oi';ok=NETk;%计算误差;E=E+(y(m)-ok)^2;%累加输出层加权系数;deltak=y(m)-ok;Wki=Wki+lr*deltak*oi;cWki=cWki+deltak*oi;%累加隐含层加权系数;deltai=oi.*(1-oi).*(deltak*Wki);Wij=Wij+lr.*deltai.*x(m);Wb=Wb+lr.*deltai;cWij=cWij+deltai.*x(m);cWb=cWb+deltai;end%调整输出层加权系数;Wki=Wki+lr/100*cWki+n*g;g=lr/100*cWki+n*g;%调整隐含层加权系数;Wij=Wij+lr/100.*cWij+n*h;h=lr/100.*cWij+n*h;Wb=Wb+lr/100.*cWb;Ez(epoch)=sqrt(E/100);if Ez(epoch)<Eminbreak;endend%计算测试输出;x=linspace(-4,4,100);%给定输入:y=1.1.*(1-x+2.*x.^2).*exp(-x.^2/2)+0.1*rand(1,100); for i=1:100NETi=x(i).*Wij+b*Wb;NETk=0;for t=1:qoi(t)=1/(1+exp(-NETi(t)));NETk=NETk+Wki(t)*oi(t);endok(i)=NETk;sum=sum+(y(i)-ok(i))^2;%输出总误差;ends=sqrt(sum/100);六:实验数据及处理:最大迭代次数:30000,停止迭代的误差:0.1。
(一):单样本训练BP网络单样本BP算法平均最小误差及其迭代次数:学习率η0.0010.0030.0050.010.050.10.2隐节点数误差0.100720.10490.10570.103070.103160.0990580.1612 4次数10303.44206.43763.61386.21272756.218085.6误差0.100930.100770.105550.108570.104820.0944830.1539 5次数9099.444962588.41555174.8189.66184.4误差0.100850.100570.113770.0992480.102230.102530.1145 7次数8986.82897.41685.4975.4194.8156.4146.8误差0.11160.109770.104810.10730.112060.0920190.2688 8次数11382.63627.22198.4738264.412012076.6误差0.112020.110330.101150.106310.111690.096926 1.1678 10次数11819.43560.21885.6912204.2124.66577由以上实验数据可知:学习效率为0.1,隐节点数为10时收敛速度快且误差比较小。