BP神经网络在Matlab函数逼近中的应用
- 格式:docx
- 大小:505.50 KB
- 文档页数:20
2012届毕业设计论文基于MatLab的BP神经网络的仿真与实现院、部:计算机与信息科学学院学生姓名:指导教师:职称讲师专业:计算机科学与技术班级:完成时间:2012年5月摘要摘要本文首先说明课题研究的目的和意义,评述课题的国内外研究现状,引出目前存在的问题。
然后分析了神经网络算法的基本原理,给出经典神经网络算法的具体实现方法,总结神经网络算法的特点,并给出神经网络算法的基本流程。
采用Matlab软件编程实现BP神经网络算法。
将神经网络算法应用于函数逼近,样本分类和样本含量估计问题中,并分析相关参数或算法对运行结果的影响。
最后对BP神经网络算法进行了展望。
关键字: 神经网络;BP神经网络;函数逼近;样本分类ABSTRACTABSTRACTFirst, the research purpose and significance of neural network is expounded in this article. Commentary studies current situation at the problem home and abroad. Leads to the existing problems. and then have analyzed algorithmic basal principle of neural networks, Give algorithmic concert of classics neural networks out the realization method. Summing up the characteristics of neural network algorithm. Neural network algorithm is given the basic processes. The arithmetic of BP neural network is realized in Matlab software. The algorithm applies of BP neural networks to the function approximation problem,Sample classification and computes the swatch content. And analysis of relevant parameters on the results of algorithm. Finally, The BP neural network algorithm is Outlook.Key words: Neural network;BP neural network;Function approximation; Sample classfication目录摘要 (I)ABSTRACT........................................................ I I 目录............................................................ I II 前言.. (V)第一章绪论................................................... - 1 -1.1 人工神经网络的研究背景和意义............................ - 1 -1.2 神经网络的发展与研究现状................................ - 2 -1.2.1 神经网络的发展..................................... - 2 -1.2.2 神经网络的现状.................................... - 3 -1.3 神经网络的研究内容和目前存在的问题...................... - 3 -1.3.1 神经网络的研究内容................................. - 3 -1.3.2 神经网络研究目前存在的问题......................... - 3 -1.4 神经网络的应用.......................................... - 4 - 第二章神经网络结构及BP神经网络................................ - 5 -2.1 神经元与网络结构........................................ - 5 -2.1.1 生物神经元......................................... - 5 -2.1.2 人工神经元......................................... - 6 -2.1.3人工神经网络的构成................................. - 6 -2.2 BP神经网络及其原理...................................... - 9 -2.2.1 BP神经网络定义.................................... - 9 -2.2.2 BP神经网络模型及其基本原理........................ - 9 -2.3 BP神经网络的主要功能................................... - 10 -2.4 BP网络的优点以及局限性................................. - 11 - 第三章 BP神经网络在实例中的应用............................... - 13 -3.1 基于MATLAB的BP神经网络工具箱函数..................... - 13 -3.1.1 BP网络创建函数................................... - 14 -3.1.2 神经元上的传递函数................................ - 14 -3.1.3 BP网络学习函数................................... - 15 -3.1.4 BP网络训练函数................................... - 15 -3.2 BP网络在函数逼近中的应用............................... - 15 -3.2.1 问题的提出........................................ - 15 -3.2.2 基于BP神经网络逼近函数........................... - 16 -3.2.3 不同频率下的逼近效果.............................. - 19 -3.2.4 讨论............................................. - 21 -3.3仿真实验................................................ - 21 -3.3.1 BP神经网络MATLAB设计............................ - 21 -3.3.2 各种BP学习算法MATLAB仿真........................ - 23 -3.3.3 各种算法仿真结果比较与分析........................ - 26 -3.3.4 调整初始权值和阈值的仿真.......................... - 27 -3.3.5 其他影响因素仿真.................................. - 29 -3.4 BP网络在样本含量估计中的应用........................... - 30 -3.4.1 问题的提出........................................ - 30 -3.4.2 基于BP神经网络对胆固醇含量估计................... - 31 -3.4.3 不同条件下的输出结果.............................. - 33 -3.4.4 讨论.............................................. - 35 -3.5 BP神经网络在样本分类中的应用........................... - 36 -3.5.1问题的提出........................................ - 36 -3.5.2 基于BP神经网络的样本分类......................... - 36 -3.5.3不同算法条件下的不同测试过程以及输出结果.......... - 38 -3.5.4讨论.............................................. - 42 - 结论........................................................... - 43 - 参考文献 (1)致谢 (2)前言前言BP神经网络是目前人工神经网络模式中最具代表性,应用最广泛的一种模型,具有自学习、自组织、自适应和很强的非线性映射能力,可以以任意精度逼近任意连续函数.近年来,为了解决BP网络收敛速度慢,训练时间长等不足,提出了许多改进算法.然而,在针对实际问题的BP网络建模过程中,选择多少层网络,每层多少个神经元节点,选择何种传递函数等,均无可行的理论指导,只能通过大量的实验计算获得.MATLAB中的神经网络工具箱(Neural NetworkToolbox,简称NNbox),为解决这一问题提供了便利的条件.神经网络工具箱功能十分完善,提供了各种MATLAB函数,包括神经网络的建立、训练和仿真等函数,以及各种改进训练算法函数,用户可以很方便地进行神经网络的设计和仿真,也可以在MATLAB源文件的基础上进行适当修改,形成自己的工具包以满足实际需要。
BP神经网络原理及其MATLAB应用BP神经网络(Back Propagation Neural Network)是一种基于梯度下降算法的人工神经网络模型,具有较广泛的应用。
它具有模拟人类神经系统的记忆能力和学习能力,可以用来解决函数逼近、分类和模式识别等问题。
本文将介绍BP神经网络的原理及其在MATLAB中的应用。
BP神经网络的原理基于神经元间的权值和偏置进行计算。
一个标准的BP神经网络通常包含三层:输入层、隐藏层和输出层。
输入层负责接收输入信息,其节点数与输入维度相同;隐藏层用于提取输入信息的特征,其节点数可以根据具体问题进行设定;输出层负责输出最终的结果,其节点数根据问题的要求决定。
BP神经网络的训练过程可以分为前向传播和反向传播两个阶段。
前向传播过程中,输入信息逐层传递至输出层,通过对神经元的激活函数进行计算,得到神经网络的输出值。
反向传播过程中,通过最小化损失函数的梯度下降算法,不断调整神经元间的权值和偏置,以减小网络输出与实际输出之间的误差,达到训练网络的目的。
在MATLAB中,可以使用Neural Network Toolbox工具箱来实现BP神经网络。
以下是BP神经网络在MATLAB中的应用示例:首先,需导入BP神经网络所需的样本数据。
可以使用MATLAB中的load函数读取数据文件,并将其分为训练集和测试集:```data = load('dataset.mat');inputs = data(:, 1:end-1);targets = data(:, end);[trainInd, valInd, testInd] = dividerand(size(inputs, 1), 0.6, 0.2, 0.2);trainInputs = inputs(trainInd, :);trainTargets = targets(trainInd, :);valInputs = inputs(valInd, :);valTargets = targets(valInd, :);testInputs = inputs(testInd, :);testTargets = targets(testInd, :);```接下来,可以使用MATLAB的feedforwardnet函数构建BP神经网络模型,并进行网络训练和测试:```hiddenLayerSize = 10;net = feedforwardnet(hiddenLayerSize);net = train(net, trainInputs', trainTargets');outputs = net(testInputs');```最后,可以使用MATLAB提供的performance函数计算网络的性能指标,如均方误差、相关系数等:```performance = perform(net, testTargets', outputs);```通过逐步调整网络模型的参数和拓扑结构,如隐藏层节点数、学习率等,可以进一步优化BP神经网络的性能。
BP神经网络在函数逼近中的应用研究作者:高坤来源:《电子技术与软件工程》2015年第20期摘要函数逼近在纯数学领域、工程和物理学领域得到了广泛的应用。
利用人工神经网络映射能力,通过样本不断学习实现对未知函数的逼近。
利用BP神经网络研究人工神经网络在函数逼近中的应用,研究过程利用MATLAB神经网络工具箱设计网络并进行仿真实验。
【关键词】人工神经网络函数逼近 BP神经网络1 引言运用逼近的思想可解决日常生活中的很多问题,随着科学技术的发展形成了一种新的理论--函数逼近论,这种函数逼近论在数学领域、工程和物理学领域得到了广泛的应用。
本文研究人工神经网络在函数逼近中的应用,并就网络结构和参数的设计对逼近性能的影响进行分析。
2 函数逼近与BP神经函数网络在数值计算中,通常需要对函数值进行计算,例如,计算基本初等函数和其他特殊函数。
如果函数只在有限点集上给定函数值时,给出一个简单的函数表达式,该函数在包含有限点集的区间内。
这涉及到在一区间上使用一个简单的函数来逼近复杂的函数,这是一个函数逼近问题。
BP神经网络一般是指基于误差反向传播算法(Error Back Propagation,BP算法)的多层前向神经网络,BP神经网络的神经元的传递函数一般都是采用Sigmoid型的可微函数,该传递函数可用以实现任意的非线性的输入与和输出间的映射,在数据处理与数据压缩、模式识别与智能系统、函数逼近等领域BP神经网络都有着广泛应用。
3 利用BP神经网络实现函数逼近下面研究BP神经网络在函数逼近中的应用。
对于非线性函数,设计一个BP神经网络实现对该函数的逼近。
假设在频率参数设为时对该非线性函数进行仿真研究,通过改变调节隐层神经元的数目n研究函数逼近能力与信号的隐层节点之间的关系。
通过改变非线性函数中的频率参数k和该函数的隐层神经元的数目n,k和n的改变对函数逼近的影响有一定的影响。
一般来说,如果非线性函数的非线性的程度越高,对需要设计的BP神经网络的要求则就越高,而且在用相同的BP神经网络来进行逼近时其效果则更差;而且隐层神经元的数目n对于BP神经网络逼近的效果也有很大影响,一般来说BP神经网络逼近非线性函数的能力越强,隐层神经元数目n就需要越大。
编程思想:BP神经网络是一个前向网络,它利用误差反向传播算法对网络进行训练,结构简单,可塑性强。
本例选择3层BP神经网络(隐层为1层)来逼近函数,单输入单输出,隐层包含7个神经元,预设精度为0.1,学习率设为0.1,循环次数为5000次,达到循环次数,或结果达到预设精度要求,结束计算。
激活函数选择双曲函数,采用梯度下降法,通过神经元的输入和误差,以及权值的学习速率来计算权值的变化率。
将输入提供给网络后,神经元的激活值从输入层经各中间层向输出层传播,输出层的神经元获得网络的输入相应。
接下来,按照减少目标输出与实际输出之间误差的方向,从输出层反向经过中间层回到输入层,从而逐层修正各连接权值。
随着误差逆向的传播修正不断进行,网络对输入响应的正确率也不断上升。
程序结果:050010001500200025003000350040004500-0.500.51图一为误差曲线,图二为验证结果由图可见:当输入样本samplelist=-0.5:0.05:0.45时,网络经过5000次的循环计算,误差几乎为0.验证数据的输入样本为:-0.48:0.05:1。
可以发现在输入小于0时,期望的输出值和通过神经网络得到的输出值偏差较大,但当输入大于0时,偏差逐渐减小,输入大于0.5时,偏差基本为0。
分析原因,可能是因为隐层数目较少,隐层神经元数目选择不当造成。
Matlab程序如下(附详细注释):clear all%********预设各个参数大小和存储空间********inputnums=1;%输入层节点为1outputnums=1;%输出层节点为1hidenums=7;%隐层节点为7maxcount=5000;%最大迭代次数samplenum=19;%一个计数器,无意义precision=0.1;%预设精度alpha=0.01;%学习率设定值error=zeros(1,maxcount+1);%error数组初始化,目的是预分配内存空间errorp=zeros(1,samplenum);%同上v=rand(inputnums,hidenums);%1*7;v初始化为一个1*7的随机归一矩阵;v表输入层到隐层的权值deltv=zeros(inputnums,hidenums);%1*7;内存空间预分配dv=zeros(inputnums,hidenums);%1*7;w=rand(hidenums,outputnums);%7*1;隐层到输出层的权值deltw=zeros(hidenums,outputnums);%7*1dw=zeros(hidenums,outputnums);%7*1samplelist=-0.5:0.05:0.45;%输入数据expectlist=exp(-1.9.*(samplelist+0.5)).*sin(10.*samplelist); %期望输出[samplelist,minp,maxp]=premnmx(samplelist);%输入数据预处理%************BP神经网络循环调整权值*************count=1;while(count<=maxcount)%结束条件1迭代5000次c=1;while(c<=samplenum)for k=1:outputnumsd(k)=expectlist(c);%获得期望输出的向量endfor i=1:inputnumsx(i)=samplelist(c);%获得输入的向量数据end%******前向计算**********;for j=1:hidenumsnet=0.0;for i=1:inputnumsnet=net+x(i)*v(i,j);%输入层到隐层的加权和∑X(i)V(i)endy(j)=1/(1+exp(-net));%输出层处理f(x)=1/(1+exp(-x)),单极性sigmiod函数 endfor k=1:outputnumsnet=0.0;for j=1:hidenumsnet=net+y(j)*w(j,k);endo(k)=1/(1+exp(-net));%计算获得的输出值end%********反向计算,修改权值*******errortmp=0.0;for k=1:outputnumserrortmp=errortmp+(d(k)-o(k))^2;%第一组训练后的误差计算errorp(c)=0.5*errortmp;%误差E=∑(d(k)-o(k))^2 * 1/2%end%****backward()********;for k=1:outputnumsyitao(k)=(d(k)-o(k))*o(k)*(1-o(k));%输出层误差偏导endfor j=1:hidenumstem=0.0;for k=1:outputnumstem=tem+yitao(k)*w(j,k);%为了求隐层偏导,而计算的求和endyitay(j)=tem*y(j)*(1-y(j));%隐层偏导end%******调整各层权值********for j=1:hidenumsfor k=1:outputnumsdeltw(j,k)=alpha*yitao(k)*y(j);%权值w的调整量deltw(已乘学习率) w(j,k)=w(j,k)+deltw(j,k);%权值调整endendfor i=1:inputnumsfor j=1:hidenumsdeltv(i,j)=alpha*yitay(j)*x(i);%同上deltwv(i,j)=v(i,j)+deltv(i,j);endendc=c+1;end %第二个while结束;表示一次BP训练结束double tmp;for i=1:samplenumtmp=tmp+errorp(i)*errorp(i);%误差求和endtmp=tmp/c;error(count)=sqrt(tmp);%误差求均方根,即精度if(error(count)<precision)%误差是否达到精度要求break;endcount=count+1;%训练次数加1end%第一个while结束%*****用其他的数据验证********error(maxcount+1)=error(maxcount);z=1:count-1;p=-0.48:0.05:1;%验证输入数据t=exp(-1.9.*(p+0.5)).*sin(10.*p)[pn,minpn,maxpn]=premnmx(p);simt=zeros(1,30);%while(a<=19)for i=1:30x=p(i);%获得输入的向量数据for j=1:hidenumsnet=0.0;net=net+x*v(1,j);%输入层到隐层的加权和y(j)=1/(1+exp(-net)); %输出层处理f(x)=1/(1+exp(-x)),单极性sigmiod函数 endnet=0.0;for k=1:hidenumsnet=net+y(k)*w(k,1);endo=1/(1+exp(-net));simt(i)=o;endsubplot(2,1,1);plot(z,error(z),'-');subplot(2,1,2);plot(p,t,'*',p,simt,'-'); grid on。
p=p1';t=t1';[pn,minp,maxp,tn,mint,maxt]=premnmx(p,t); %原始数据归一化net=newff(minmax(pn),[5,1],{'tansig','purelin'},'traingdx');%设置网络,建立相应的BP网络net.trainParam.show=2000; % 训练网络net.trainParam.lr=0.01;net.trainParam.epochs=100000;net.trainParam.goal=1e-5;[net,tr]=train(net ,pn,tn); %调用TRAINGDM算法训练BP 网络pnew=pnew1';pnewn=tramnmx(pnew,minp,maxp);anewn=sim(net,pnewn); %对BP网络进行仿真anew=postmnmx(anewn,mint,maxt); %还原数据y=anew';1、BP网络构建(1)生成BP网络=net newff PR S S SNl TF TF TFNl BTF BLF PF(,[1 2...],{ 1 2...},,,)PR:由R维的输入样本最小最大值构成的2R⨯维矩阵。
S S SNl:各层的神经元个数。
[ 1 2...]{ 1 2...}TF TF TFNl:各层的神经元传递函数。
BTF:训练用函数的名称。
(2)网络训练[,,,,,] (,,,,,,)=net tr Y E Pf Af train net P T Pi Ai VV TV(3)网络仿真=[,,,,] (,,,,)Y Pf Af E perf sim net P Pi Ai T{'tansig','purelin'},'trainrp'2、BP网络举例举例1、%traingdclear;clc;P=[-1 -1 2 2 4;0 5 0 5 7];T=[-1 -1 1 1 -1];%利用minmax函数求输入样本范围net = newff(minmax(P),T,[5,1],{'tansig','purelin'},'trainrp');net.trainParam.show=50;%net.trainParam.lr=0.05;net.trainParam.epochs=300;net.trainParam.goal=1e-5;[net,tr]=train(net,P,T);net.iw{1,1}%隐层权值net.b{1}%隐层阈值net.lw{2,1}%输出层权值net.b{2}%输出层阈值sim(net,P)举例2、利用三层BP神经网络来完成非线性函数的逼近任务,其中隐层神经元个数为五个。
(整理)BP神经网络matlab实现和matlab工具箱使用实例.BP神经网络matlab实现和matlab工具箱使用实例经过最近一段时间的神经网络学习,终于能初步使用matlab实现BP网络仿真试验。
这里特别感谢研友sistor2004的帖子《自己编的BP算法(工具:matlab)》和研友wangleisxcc的帖子《用C++,Matlab,Fortran实现的BP算法》前者帮助我对BP算法有了更明确的认识,后者让我对matlab下BP函数的使用有了初步了解。
因为他们发的帖子都没有加注释,对我等新手阅读时有一定困难,所以我把sistor2004发的程序稍加修改后加注了详细解释,方便新手阅读。
%严格按照BP网络计算公式来设计的一个matlab程序,对BP网络进行了优化设计%yyy,即在o(k)计算公式时,当网络进入平坦区时(<0.0001)学习率加大,出来后学习率又还原%v(i,j)=v(i,j)+deltv(i,j)+a*dv(i,j); 动量项clear allclcinputNums=3; %输入层节点outputNums=3; %输出层节点hideNums=10; %隐层节点数maxcount=20000; %最大迭代次数samplenum=3; %一个计数器,无意义precision=0.001; %预设精度yyy=1.3; %yyy是帮助网络加速走出平坦区alpha=0.01; %学习率设定值a=0.5; %BP优化算法的一个设定值,对上组训练的调整值按比例修改字串9error=zeros(1,maxcount+1); %error数组初始化;目的是预分配内存空间errorp=zeros(1,samplenum); %同上v=rand(inputNums,hideNums); %3*10;v初始化为一个3*10的随机归一矩阵; v表输入层到隐层的权值deltv=zeros(inputNums,hideNums); %3*10;内存空间预分配dv=zeros(inputNums,hideNums); %3*10;w=rand(hideNums,outputNums); %10*3;同Vdeltw=zeros(hideNums,outputNums);%10*3dw=zeros(hideNums,outputNums); %10*3samplelist=[0.1323,0.323,-0.132;0.321,0.2434,0.456;-0.6546,-0.3242,0.3255]; %3*3;指定输入值3*3(实为3个向量)expectlist=[0.5435,0.422,-0.642;0.1,0.562,0.5675;-0.6464,-0.756,0.11]; %3*3;期望输出值3*3(实为3个向量),有导师的监督学习count=1;while (count<=maxcount) %结束条件1迭代20000次c=1;while (c<=samplenum)for k=1:outputNumsd(k)=expectlist(c,k); %获得期望输出的向量,d(1:3)表示一个期望向量内的值endfor i=1:inputNumsx(i)=samplelist(c,i); %获得输入的向量(数据),x(1:3)表一个训练向量字串4end%Forward();for j=1:hideNumsnet=0.0;for i=1:inputNumsnet=net+x(i)*v(i,j);%输入层到隐层的加权和∑X(i)V(i)endy(j)=1/(1+exp(-net)); %输出层处理f(x)=1/(1+exp(-x))单极性sigmiod函数endfor k=1:outputNumsnet=0.0;for j=1:hideNumsnet=net+y(j)*w(j,k);endif count>=2&&error(count)-error(count+1)<=0.0001o(k)=1/(1+exp(-net)/yyy); %平坦区加大学习率else o(k)=1/(1+exp(-net)); %同上endend%BpError(c)反馈/修改;errortmp=0.0;for k=1:outputNumserrortmp=errortmp+(d(k)-o(k))^2; %第一组训练后的误差计算enderrorp(c)=0.5*errortmp; %误差E=∑(d(k)-o(k))^2 * 1/2%end%Backward();for k=1:outputNumsyitao(k)=(d(k)-o(k))*o(k)*(1-o(k)); %输入层误差偏导字串5endfor j=1:hideNumstem=0.0;for k=1:outputNumstem=tem+yitao(k)*w(j,k); %为了求隐层偏导,而计算的∑endyitay(j)=tem*y(j)*(1-y(j)); %隐层偏导end%调整各层权值for j=1:hideNumsfor k=1:outputNumsdeltw(j,k)=alpha*yitao(k)*y(j); %权值w的调整量deltw(已乘学习率)w(j,k)=w(j,k)+deltw(j,k)+a*dw(j,k);%权值调整,这里的dw=dletw(t-1),实际是对BP算法的一个dw(j,k)=deltw(j,k); %改进措施--增加动量项目的是提高训练速度endendfor i=1:inputNumsfor j=1:hideNumsdeltv(i,j)=alpha*yitay(j)*x(i); %同上deltwv(i,j)=v(i,j)+deltv(i,j)+a*dv(i,j);dv(i,j)=deltv(i,j);endendc=c+1;end%第二个while结束;表示一次BP训练结束double tmp;tmp=0.0; 字串8for i=1:samplenumtmp=tmp+errorp(i)*errorp(i);%误差求和endtmp=tmp/c;error(count)=sqrt(tmp);%误差求均方根,即精度if (error(count)<precision)%另一个结束条件< p="">break;endcount=count+1;%训练次数加1end%第一个while结束error(maxcount+1)=error(maxcount);p=1:count;pp=p/50;plot(pp,error(p),"-"); %显示误差然后下面是研友wangleisxcc的程序基础上,我把初始化网络,训练网络,和网络使用三个稍微集成后的一个新函数bpnet %简单的BP神经网络集成,使用时直接调用bpnet就行%输入的是p-作为训练值的输入% t-也是网络的期望输出结果% ynum-设定隐层点数一般取3~20;% maxnum-如果训练一直达不到期望误差之内,那么BP迭代的次数一般设为5000% ex-期望误差,也就是训练一小于这个误差后结束迭代一般设为0.01% lr-学习率一般设为0.01% pp-使用p-t虚拟蓝好的BP网络来分类计算的向量,也就是嵌入二值水印的大组系数进行训练然后得到二值序列% ww-输出结果% 注明:ynum,maxnum,ex,lr均是一个值;而p,t,pp,ww均可以为向量字串1% 比如p是m*n的n维行向量,t那么为m*k的k维行向量,pp为o*i的i维行向量,ww为o* k的k维行向量%p,t作为网络训练输入,pp作为训练好的网络输入计算,最后的ww作为pp经过训练好的BP训练后的输出function ww=bpnet(p,t,ynum,maxnum,ex,lr,pp)plot(p,t,"+");title("训练向量");xlabel("P");ylabel("t");[w1,b1,w2,b2]=initff(p,ynum,"tansig",t,"purelin"); %初始化含一个隐层的BP网络zhen=25; %每迭代多少次更新显示biglr=1.1; %学习慢时学习率(用于跳出平坦区)litlr=0.7; %学习快时学习率(梯度下降过快时)a=0.7 %动量项a大小(△W(t)=lr*X*ん+a*△W(t-1))tp=[zhen maxnum ex lr biglr litlr a 1.04]; %trainbpx[w1,b1,w2,b2,ep,tr]=trainbpx(w1,b1,"tansig",w2,b2,"purelin", p,t,tp);ww=simuff(pp,w1,b1,"tansig",w2,b2,"purelin"); %ww就是调用结果下面是bpnet使用简例:%bpnet举例,因为BP网络的权值初始化都是随即生成,所以每次运行的状态可能不一样。
基于BP神经网络的函数逼近方法及其MATLAB实现作者:李超群落k孝摘要:MATLAB软件及其BP神经网络工具箱函数的应用,结合一个实际的例子详细阐述了基于BP神经网络的函数逼近过程及其MATLAB实现方法。
数值计算方法已经在各个学科领域得到了广泛应用,并且促使新的有效数值方法不断出现。
计算工具的使用为科学计算带来了很大的方便,但山于计算机字长的限制,许多夏杂的、大规模的计算问题需简化。
神经网络是对生物神经系统的模拟,其信息处理功能是山网络单元(神经元)的输入输出特性(激活特性)、网络的拓扑结构(神经元的连接方式)、连接权的大小(突触联系强度)和神经元的阂值(视作特殊的连接权)所决定的。
在神经网络的实际应用中,绝大部分的神经网络模型使用的是BP神经网络或其变化形式,它也是前馈神经网络的核心部分。
BP神经网络的主要特点是非线性映射能力,这种能力使其能够对任意非线性函数进行很好的逼近。
鉴于函数逼近及BP神经网络的这些特点,本文提出了基于BP神经网络的函数逼近方法。
此外,本文开创性地遗弃了C、C++、VC等传统的高级编程语言,采用功能强大的MATLAB语言编程,直接调用MATLAB软件包中的BP神经网络工具箱函数,使程序简捷明了,达到了事半功倍的效果。
1BP神经网络及其函数垣近能力BP神经网络是一•种单向传播的多层前馈网络,网络除了有输入输出节点外,还有一层或多层的隐含层节点,同层节点中没有任何连接,层间节点中实行全连接。
输入信号从输入层节点依次传过各隐含层节点,最后传到输出层节点。
每层节点的输出只影响下一层节点的输出。
各层节点的传递函数通常为双曲1E切S型(sigmoN)函数,但输出层节点的传递函数有时为线性函数。
BP神经网络可以看作是一个从输入到输出的高度非线性映射,即严:及”i及”,/(J)=y。
对于样本集合:输入xi(E及”)和输出yj于及”),可认为存在某一映射好使得8(Xj)=y6(i = l, 2, An)成立。
燕山大学模式识别与智能系统导论题目: 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网络MATLAB仿真介绍对于BP网络,存在一个重要的结论,即单隐层的BP网络可以逼近任意的非线性映射,前提是隐含层的神经元个数可以随意调整。
下面以一个单隐层的BP神经网络设计为例,介绍利用神经网络工具箱进行BP网络设计及分析的过程。
此处,利用一个单隐层的BP网络来逼近一个函数。
1.问题描述通过对函数进行采样得到了网络的输入变量P和目标变量T,分别为:P = -1 : 0.1 : 1;T = [-0.9602 -0.5770 -0.0729 0.3771 0.6405 0.6600 0.4609 0.1336 -0.2013 -0.4344 -0.5000 -0.3930 -0.1647 0.0988 0.3072 0.3960 0.3449 0.1816 -0.0312 -0.2189 -0.3201];每组向量都有21维数据,可以将输入向量和目标向量绘制在一起,如下图:2. 网络设计网络的输入层和输出层的神经元个数均为1,根据隐含层设计经验,解决该问题的网络的隐层神经元个数应该在3~8之间。
下面设计一个隐含层神经元数目可变的BP网络,通过误差对比,确定最佳的隐含层神经元个数,并检查隐含层神经元个数对网络性能的影响。
网络设计及训练代码如下:P = -1 : 0.1 : 1;T = [-0.9602 -0.5770 -0.0729 0.3771 0.6405 0.6600 0.4609 0.1336 -0.2013 -0.4344 -0.5000 -0.3930 -0.1647 0.0988 0.3072 0.3960 0.3449 0.1816 -0.0312 -0.2189 -0.3201];s = 3 : 8; % S表示隐层数目的可选项res = 1 : 6;for i = 1 : 6% 隐含层神经元的传递函数为tansig,输出层神经元的传递函数为logsig% 目标函数在[-1, 1]间,刚好满足tansig的输出要求。
Matlab的BP神经⽹络⼯具箱及其在函数逼近中的应⽤1.神经⽹络⼯具箱概述Matlab神经⽹络⼯具箱⼏乎包含了现有神经⽹络的最新成果,神经⽹络⼯具箱模型包括感知器、线性⽹络、BP⽹络、径向基函数⽹络、竞争型神经⽹络、⾃组织⽹络和学习向量量化⽹络、反馈⽹络。
本⽂只介绍BP神经⽹络⼯具箱。
2.BP神经⽹络⼯具箱介绍BP神经⽹络学习规则是不断地调整神经⽹络的权值和偏值,使得⽹络输出的均⽅误差和最⼩。
下⾯是关于⼀些BP神经⽹络的创建和训练的名称:(1)newff:创建⼀前馈BP⽹络(隐含层只有⼀层)(2)newcf:创建⼀多层前馈BP⽹络(隐含层有多层)(3)train:训练⼀个神经⽹络(4)sim:仿真⼀个神经⽹络以上⼏个是最主要的语句,在后⾯的实例应⽤中会详细说明⽤法。
3.BP神经⽹络⼯具箱在函数逼近中的应⽤BP神经⽹络具有很强的映射能⼒,主要⽤于模式识别分类、函数逼近、函数压缩等。
下⾯通过实例来说明BP⽹络在函数逼近⽅⾯的应⽤。
本⽂需要逼近的函数是f(x)=1+sin(k*pi/2*x),其中,选择k=2进⾏仿真,设置隐藏层神经元数⽬为n,n可以改变,便于后⾯观察隐藏层节点与函数逼近能⼒的关系。
3.1 k=2,n=5时的仿真实验先作出⽬标曲线的图形,以下为matlab代码:clear allclc%%%%%%%%%%设置⽹络输⼊值和⽬标值%%%%%%%%%%k=2;%f(x)中的k值x=[-1:.05:8];f=1+sin(k*pi/2*x);plot(x,f,'-');title('要逼近的⾮线性函数');xlabel('时间');ylabel('⾮线性函数');接着⽤newff函数建⽴BP神经⽹络结构,以下为matlab代码:%%%%%%%%%%建⽴⽹络%%%%%%%%%%n=5;%隐藏层节点数net = newff(minmax(x),[n,1],{'tansig' 'purelin'},'trainlm');%对于初始⽹络,可以应⽤sim()函数观察⽹络输出。
MATLAB程序代码--bp神经网络应用举例1BP神经网络的设计实例例1采用动量梯度下降算法训练BP网络。
训练样本定义如下:输入矢量为p=[-1-231-115-3]目标矢量为t=[-1-111]解:本例的MATLAB程序如下:close allclearecho onclc%NEWFF——生成一个新的前向神经网络%TRAIN——对BP神经网络进行训练%SIM——对BP神经网络进行仿真pause%敲任意键开始clc%定义训练样本%P为输入矢量P=[-1,-2,3,1;-1,1,5,-3];%T为目标矢量T=[-1,-1,1,1];pause;clc%创建一个新的前向神经网络net=newff(minmax(P),[3,1],{'tansig','purelin'},'traingdm')%当前输入层权值和阈值inputWeights=net.IW{1,1}inputbias=net.b{1}%当前网络层权值和阈值layerWeights=net.LW{2,1}layerbias=net.b{2}pauseclc%设置训练参数net.trainParam.show=50;%两次显示之间的训练次数,缺省值为25 net.trainParam.lr=0.05;%学习速率net.trainParam.mc=0.9;%动量常数设置,缺省就是0.9net.trainParam.epochs=1000;%训练次数,缺省值为100net.trainParam.goal=1e-3;%网络性能目标,缺省值为0clc%调用TRAINGDM算法训练BP网络[net,tr]=train(net,P,T);pauseclc%对BP网络进行仿真A=sim(net,P)%计算仿真误差E=T-AMSE=mse(E)pauseclcecho off例2采用贝叶斯正则化算法提高BP网络的推广能力。
BP神经网络逼近y=1/x,MATLAB程序%BP神经网络逼近y=1/x;%----------------定义必要的变量方便调试--------------------clear;clc;q=8; %神经元个数max_epoch=100000; %最大训练次数err_goal=0.01; %期望误差最小值alpha =0.01; %学习率X = 1:0.5:10; %样本D=1./X; %期望值[m,n] = size(X); %m为输入个数,n为样本数量l=1; %单输出wjk = rand(l,q); %隐层到输出层的初始权值vij = rand(q,m); %输入层到隐层的初始权值for epoch=1:max_epoch%-------------------------前向传播求输入--------------------NETj=vij*X; %隐层净输入Yj=1./(1+exp(-NETj)); %计算隐层输出NETk=wjk*Yj; %输出层净输入Ok=1./(1+exp(-NETk));%计算输出层输出e=((D-Ok)*(D-Ok)')/2; %计算误差函数E(epoch)=e;if(e<err_goal)char='达到输出误差要求学习结束'break;end%-------------------反向传播调权值-------------------------------%调整输出层权值deltak=Ok.*(1-Ok).*(D-Ok);wjk=wjk+alpha*deltak*Yj';%调整隐含层权值deltai=Yj.*(1-Yj).*(deltak'*wjk)';vij=vij+alpha*deltai*X';end%-----------------取样本测试---------------------------------Xx = 1:3:66;D1 = 1./Xx; %期望输出[m1,n1] = size(Xx);NETj1=vij*Xx; %隐层净输入Yj1=1./(1+exp(-NETj1)); %计算隐层输出NETk1=wjk*Yj1; %输出层净输入Ok1=1./(1+exp(-NETk1));%计算输出层输出%-----------------------显示与绘图---------------------------------epoch %显示样本集计算次数Ok %显示训练集输出层输出Ok1 %显示测试集输出层输出subplot(2,2,1);plot(X,D,'b-o'); %样本与期望值title('训练集网络样本')subplot(2,2,2);plot(X,Ok,'b-o',X,D,'r-x');%训练集网络输出与期望值title('训练集网络输出与期望值')subplot(2,2,3);plot(1:1:epoch,E,'k*'); %显示误差title('训练集输出误差')subplot(2,2,4);plot(Xx,Ok1,'b-o',Xx,D1,'r-x'); %绘制样本及网络输出title('测试集网络输出与期望值')运行结果当隐层神经元个数q=8时char =达到输出误差要求学习结束epoch =86197Ok =Columns 1 through 100.8717 0.7039 0.5349 0.4121 0.3313 0.2775 0.2398 0.2120 0.1908 0.1741Columns 11 through 190.1608 0.1499 0.1410 0.1337 0.1276 0.1225 0.1183 0.1147 0.1117Ok1 =Columns 1 through 100.8717 0.2398 0.1410 0.1117 0.1013 0.0972 0.0956 0.0950 0.0947 0.0946Columns 11 through 200.0945 0.0945 0.0945 0.0945 0.0945 0.0945 0.0945 0.0945 0.0945 0.0945Columns 21 through 220.0945 0.0945当隐层神经元个数q=2时epoch =100000Ok =Columns 1 through 100.3222 0.3112 0.3007 0.2910 0.2821 0.2741 0.2668 0.2603 0.2546 0.2495Columns 11 through 190.2451 0.2413 0.2379 0.2351 0.2326 0.2305 0.2287 0.2271 0.2258Ok1 =Columns 1 through 100.3222 0.2668 0.2379 0.2258 0.2211 0.2194 0.2187 0.2185 0.2184 0.2184Columns 11 through 200.2184 0.2184 0.2184 0.2184 0.2184 0.2184 0.2184 0.2184 0.2184 0.2184Columns 21 through 220.2184 0.2184结果分析由运行结果和图形可以看出隐层神经元个数q=8时,网络训练86197次就能使误差达到0.01q=2时,网络训练次数达到最大值100000次还没有达到误差允许的范围。
BP神经网络的MATLAB语法介绍BP神经网络(Back Propagation Neural Network)是一种常用的人工神经网络算法,其目的是通过反向传播算法来训练网络模型,实现模式识别和函数逼近等任务。
在MATLAB中,可以使用Neural Network Toolbox来实现BP神经网络模型的构建和训练。
本文将介绍BP神经网络的MATLAB语法,包括网络的构建、训练、预测和模型评估等方面。
一、网络构建1.网络结构定义在MATLAB中,可以使用feedforwardnet函数来定义BP神经网络的结构。
该函数有两个参数,第一个参数是一个向量,表示每一层的节点数;第二个参数是一个向量,表示每一层的传输函数。
例如,下面的代码定义了一个具有2个输入节点、10个隐藏节点和1个输出节点的BP神经网络:```net = feedforwardnet([2, 10, 1]);```2.网络参数初始化网络参数初始化可以使用init函数,其参数是一个BP神经网络对象。
例如,下面的代码将使用init函数来初始化上一步中定义的网络对象:```net = init(net);```二、训练网络1.数据准备在训练BP神经网络之前,需要将数据集划分为输入和输出,然后进行数据归一化处理。
在MATLAB中,可以使用mat2cell函数将数据集划分为输入和输出集合,使用mapminmax函数来归一化数据。
例如,下面的代码将数据集划分为输入集合和输出集合,并进行数据归一化处理:```inputs = mat2cell(data(:, 1:end-1)', size(data, 2)-1,ones(size(data, 1), 1));outputs = mat2cell(data(:, end)', ones(size(data, 1), 1), 1);[input, inputPS] = mapminmax(cat(2, inputs{:}));[output, outputPS] = mapminmax(cat(2, outputs{:}));```2.训练参数设置在训练BP神经网络之前,需要设置一些训练参数,例如训练算法和最大训练次数。
燕山大学模式识别与智能系统导论
题目: 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)神经网络是一种神经网络学习算法。
其由输入层、中间层、输出层组成的阶层型神经网络,中间层可扩展为多层。
相邻层之间各神经元进行全连接,而每层各神经元之间无连接,网络按有教师示教的方式进行学习,当一对学习模式提供给网络后,各神经元获得网络的输入响应产生连接权值(Weight)。
然后按减小希望输出与实际输出误差的方向,从输出层经各中间层逐层修正各连接权,回到输入层。
此过程反复交替进行,直至网络的全局误差趋向给定的极小值,即完成学习的过程。
1.2 BP神经网络模型及其基本原理
BP网络是一种多层前馈神经网络,由输入层、隐层和输出层组成。
图7为一个典型的三层BP网络的拓扑结构,层与层之间采用全互连方式,同一层之间不存在相互连接,隐层可以有一层或多层。
层与层之间有两种信号在流通:一种是工作信号(用实线表示),它是施加输入信号后向前传播直到在输出端产生实际输出的信号,是输入和权值的函数。
另一种是误差信号(用虚线表示),网络实际输出与期望输出间的差值即为误差,它由输出端开始逐层向后传播。
BP网络的学习过程程由前向计算过程和误差反向传播过程组成。
在前向计算过程中,输入量从输入层经隐层逐层计算,并传向输出层,每层神经元的状态只影响下一层神经元的状态。
如输出层不能得到期望的输出,则转入误差反向传播过程,误差信号沿原来的连接通路返回,逐次调整网络各层的权值和阈值,直至到达输入层,再重复向计算。
这两个过程一次反复进行,不断调整各层的权值和阈值,使得网络误差最小或达到人们所期望的要求时,学习过程结束。
图1 典型BP神经网络模型
生物神经元信号的传递是通过突触进行的一个复杂的电化学等过程, 在人工神经网络中是将其简化模拟成一组数字信号通过一定的学习规则而不断变动更新的过程,这组数字储存在神经元之间的连接权重。
网络的输入层模拟的是神经系统中的感觉神经元,它接收输入样本信号。
输入信号经输入层输入,通过隐含层的复杂计算由输出层输出,输出信号与期望输出相比较,若有误差,再将误差信号反向由输出层通过隐含层处理后向输入层传播。
在这个过程中,误差通过梯度下降算法,分摊给各层的所有单元,从而获得各单元的误差信号,以此误差信号为依据修正各单元权值,网络权值因此被重新分布。
此过程完成后,输入信号再次由输入层输入网络,重复上述过程。
这种信号正向传播与误差反向传播的各层权值调整过程周而复始地进行着,直到网络输出的误差减少到可以接受的程度,或进行到预先设定的学习次数为止。
权值不断调整的过程就是网络的学习训练过程。
BP 神经网络的信息处理方式具有如下特点:
1)信息分布存储。
人脑存储信息的特点是利用突触效能的变化来调整存储内容,即信息存储在神经元之间的连接强度的分布上,BP神经网络模拟人脑的这一特点,使信息以连接权值
的形式分布于整个网络。
2) 信息并行处理。
人脑神经元之间传递脉冲信号的速度远低于冯·诺依曼计算机的工作速度,但是在很多问题上却可以做出快速的判断、决策和处理,这是由于人脑是一个大规模并行与串行组合的处理系统。
BP神经网络的基本结构模仿人脑,具有并行处理的特征,大大提高了网络功能。
3)具有容错性。
生物神经系统部分不严重损伤并不影响整体功能,BP神经网络也具有这种特性,网络的高度连接意味着少量的误差可能不会产生严重的后果,部分神经元的损伤不破坏整体,它可以自动修正误差。
这与现代计算机的脆弱性形成鲜明对比。
4)具有自学习、自组织、自适应的能力。
BP神经网络具有初步的自适应与自组织能力,在学习或训练中改变突触权值以适应环境,可以在使用过程中不断学习完善自己的功能,并且同一网络因学习方式的不同可以具有不同的功能,它甚至具有创新能力,可以发展知识,以至超过设计者原有的知识水平。
1.3 BP神经网络的主要功能
目前,在人工神经网络的实际应用中。
绝大部分的神经网络模型都采用BP神经网络及其变化形式。
它也是前向网络的核心部分,体现了人工神经网络的精华。
BP网络主要用于以下四方面。
(1)函数逼近:用输入向量和相应的输出向量训练一个网络以逼近一个函数。
(2)模式识别:用一个待定的输出向量将它与输入向量联系起来。
(3)分类:把输入向量所定义的合适方式进行分类。
(4)数据压缩:减少输出向量维数以便传输或存储。
1.4 BP网络的优点以及局限性
BP神经网络最主要的优点是具有极强的非线性映射能力。
理论上,对于一个三层和三层以上的BP网络,只要隐层神经元。