matlab BP神经网络
- 格式:docx
- 大小:842.23 KB
- 文档页数:17
Matlab工具箱中的BP与RBF函数Matlab神经网络工具箱中的函数非常丰富,给网络设置适宜的属性,可以加快网络的学习速度,缩短网络的学习进程。
限于篇幅,仅对本章所用到的函数进展介绍,其它的函数与其用法请读者参考联机文档和帮助。
1 BP与RBF网络创建函数在Matlab工具箱中有如表1所示的创建网络的函数,作为示例,这里只介绍函数newff、newcf、newrb和newrbe。
表 1 神经网络创建函数(1) newff函数功能:创建一个前馈BP神经网络。
调用格式:net = newff(PR,[S1S2...S Nl],{TF1 TF2...TF Nl},BTF,BLF,PF)参数说明:•PR - R个输入的最小、最大值构成的R×2矩阵;•S i–S NI层网络第i层的神经元个数;•TF i - 第i层的传递函数,可以是任意可导函数,默认为 'tansig',可设置为logsig,purelin等;•BTF -反向传播网络训练函数,默认为 'trainlm',可设置为trainbfg,trainrp,traingd等;•BLF -反向传播权值、阈值学习函数,默认为 'learngdm';•PF -功能函数,默认为'mse';(2) newcf函数功能:创建一个N层的层叠(cascade)BP网络调用格式:net = newcf(Pr,[S1 S2...SNl],{TF1 TF2...TFNl},BTF,BLF,PF)参数同函数newff。
(3) newrb函数功能:创建一个径向基神经网络。
径向基网络可以用来对一个函数进展逼近。
newrb函数用来创建一个径向基网络,它可以是两参数网络,也可以是四参数网络。
在网络的隐层添加神经元,直到网络满足指定的均方误差要求。
调用格式:net = newrb(P,T,GOAL,SPREAD)参数说明:•P:Q个输入向量构成的R×Q矩阵;•T:Q个期望输出向量构成的S×Q矩阵;•GOAL:均方误差要求,默认为0。
MATLAB程序代码--神经网络基础问题整理所选问题及解答大部分来源于/bbs/资料大部分为江南一纪收集整理对其他参与整理的版友(不一一列举)及资料的原创者一并表示感谢因江南对神经网络的理解也不是很多错误之处难勉请谅解有什么问题可以来/bbs/的『人工神经网络专区』交流***************************************************************** 1神经网络的教材哪本比较经典神经网络原理Simon Haykin ? 叶世?史忠植译神经网络设计神经网络书籍神经网络模型及其matlab仿真程序设计周开利(对神经网络工具箱函数及里面神经网络工具箱的神经网络模型的网络对象及其属性做了详细的论述,后者在神经网络理论与matlab7实现那本书里面是没有的)神经网络理论与matlab7实现(这本书对初学这入门还是挺不错的,看过了,就对matlab神经网络工具箱有教好的了解)神经网络设计(我认为这是一本很好的书,讲理论不是很多,看过之后就会对神经网络的原理有更好的了解)神经网络结构设计的理论与方法(这本书对提高网络的泛化能力的一些方法做了讲述,并且书后有程序,对网络结构的设计应该是挺有帮助的)摘自给初学matlab神经网络的一点建议/bbs/read.php?tid=1111&keyword=2 神经网络理论的发展与前沿问题神经网络理论的发展与前沿问题刘永?摘要系统地论述了神经网络理论发展的历史和现状,在此基础上,对其主要发展趋向和所涉及的前沿问题进行了阐述.文中还作了一定的评论,并提出了新的观点.关键词神经网络理论,神经计算,进化计算,基于神经科学和数学的研?查看原文/bbs/read.php?tid=5374&keyword=%C9%F1%BE%AD%CD%F8%C2%E73 神经网络的权值和阈值分别是个什么概念??权值和阈值是神经元之间的连接,将数据输入计算出一个输出,然后与实际输出比较,误差反传,不断调整权值和阈值假如p1=[1 1 -1]';p2=[1 -1 -1]';属于不同的类须设计分类器将他们分开这里用单层神经元感知器初始权值w=[0.2 0.2 0.3] b=-0.3输出a1 a2a1=hardlims(w*p1+b)a2=hardlims(w*p2+b)如果不能分开,还须不断调整w,b这里说明一下权值w 阈值b 而已简单地说,阈值也可以看作一维权值,只不过它所对应的那一维样本永远是-1(也有的书上说是1),这样就把输入样本增加了一维,更有利于解决问题./bbs/read.php?tid=6078&keyword=%C9%F1%BE%AD %CD%F8%C2%E74 神经网络归一化看了研学和ai创业研发俱乐部神经网络版及振动论坛部分帖子内容,对归一化做一下整理,冒昧引用了一些他人的观点,有的未列出其名,请谅解-------------------------------------------------------------------------------------------------------关于神经网络归一化方法的整理由于采集的各数据单位不一致,因而须对数据进行[-1,1]归一化处理,归一化方法主要有如下几种,供大家参考:(by james)1、线性函数转换,表达式如下:y=(x-MinValue)/(MaxValue-MinValue)说明:x、y分别为转换前、后的值,MaxValue、MinValue分别为样本的最大值和最小值。
MATLAB神经网络工具箱函数说明:本文档中所列出的函数适用于MATLAB5.3以上版本,为了简明起见,只列出了函数名,若需要进一步的说明,请参阅MATLAB的帮助文档。
1. 网络创建函数newp 创建感知器网络newlind 设计一线性层newlin 创建一线性层newff 创建一前馈BP网络newcf 创建一多层前馈BP网络newfftd 创建一前馈输入延迟BP网络newrb 设计一径向基网络newrbe 设计一严格的径向基网络newgrnn 设计一广义回归神经网络newpnn 设计一概率神经网络newc 创建一竞争层newsom 创建一自组织特征映射newhop 创建一Hopfield递归网络newelm 创建一Elman递归网络2. 网络应用函数sim 仿真一个神经网络init 初始化一个神经网络adapt 神经网络的自适应化train 训练一个神经网络3. 权函数dotprod 权函数的点积ddotprod 权函数点积的导数dist Euclidean距离权函数normprod 规范点积权函数negdist Negative距离权函数mandist Manhattan距离权函数linkdist Link距离权函数4. 网络输入函数netsum 网络输入函数的求和dnetsum 网络输入函数求和的导数5. 传递函数hardlim 硬限幅传递函数hardlims 对称硬限幅传递函数purelin 线性传递函数tansig 正切S型传递函数logsig 对数S型传递函数dpurelin 线性传递函数的导数dtansig 正切S型传递函数的导数dlogsig 对数S型传递函数的导数compet 竞争传递函数radbas 径向基传递函数satlins 对称饱和线性传递函数6. 初始化函数initlay 层与层之间的网络初始化函数initwb 阈值与权值的初始化函数initzero 零权/阈值的初始化函数initnw Nguyen_Widrow层的初始化函数initcon Conscience阈值的初始化函数midpoint 中点权值初始化函数7. 性能分析函数mae 均值绝对误差性能分析函数mse 均方差性能分析函数msereg 均方差w/reg性能分析函数dmse 均方差性能分析函数的导数dmsereg 均方差w/reg性能分析函数的导数8. 学习函数learnp 感知器学习函数learnpn 标准感知器学习函数learnwh Widrow_Hoff学习规则learngd BP学习规则learngdm 带动量项的BP学习规则learnk Kohonen权学习函数learncon Conscience阈值学习函数learnsom 自组织映射权学习函数9. 自适应函数adaptwb 网络权与阈值的自适应函数10. 训练函数trainwb 网络权与阈值的训练函数traingd 梯度下降的BP算法训练函数traingdm 梯度下降w/动量的BP算法训练函数traingda 梯度下降w/自适应lr的BP算法训练函数traingdx 梯度下降w/动量和自适应lr的BP算法训练函数trainlm Levenberg_Marquardt的BP算法训练函数trainwbl 每个训练周期用一个权值矢量或偏差矢量的训练函数11. 分析函数maxlinlr 线性学习层的最大学习率errsurf 误差曲面12. 绘图函数plotes 绘制误差曲面plotep 绘制权和阈值在误差曲面上的位置plotsom 绘制自组织映射图13. 符号变换函数ind2vec 转换下标成为矢量vec2ind 转换矢量成为下标矢量14. 拓扑函数gridtop 网络层拓扑函数hextop 六角层拓扑函数randtop 随机层拓扑函数。
数据预测之BP神经网络具体应用以及matlab代码2013-12-25 17:17 2467人阅读评论(0) 收藏举报1.具体应用实例。
根据表2,预测序号15的跳高成绩。
表2 国内男子跳高运动员各项素质指标4.4 (序号15)跳高成绩预测4.4.1 数据整理1)我们将前14组国内男子跳高运动员各项素质指标作为输入,即(30m行进跑,立定三级跳远,助跑摸高,助跑4-6步跳高,负重深蹲杠铃,杠铃半蹲系数,100m,抓举),将对应的跳高成绩作为输出。
并用matlab自带的premnmx()函数将这些数据归一化处理。
数据集:(注意:每一列是一组输入训练集,行数代表输入层神经元个数,列数输入训练集组数)P=[3.2 3.2 3 3.2 3.2 3.4 3.2 3 3.2 3.2 3.2 3.9 3.1 3.2;9.6 10.3 9 10.3 10.1 10 9.6 9 9.6 9.2 9.5 9 9.5 9.7;3.45 3.75 3.5 3.65 3.5 3.4 3.55 3.5 3.55 3.5 3.4 3.1 3.6 3.45;2.15 2.2 2.2 2.2 2 2.15 2.14 2.1 2.1 2.1 2.15 2 2.1 2.15;140 120 140 150 80 130 130 100 130 140 115 80 90 130;2.83.4 3.5 2.8 1.5 3.2 3.5 1.8 3.5 2.5 2.8 2.2 2.74.6;11 10.9 11.4 10.8 11.3 11.5 11.8 11.3 11.8 11 11.9 13 11.1 10.85;50 70 50 80 50 60 65 40 65 50 50 50 70 70];T=[2.24 2.33 2.24 2.32 2.2 2.27 2.2 2.26 2.2 2.24 2.24 2.2 2.2 2.35];4.4.2 模型建立4.4.2.1 BP网络模型BP网络(Back-ProPagation Network)又称反向传播神经网络,通过样本数据的训练,不断修正网络权值和阈值使误差函数沿负梯度方向下降,逼近期望输出。
[matlab⼯具箱]神经⽹络NeuralNet//⽬的是学习在BP神经⽹络的基础上添加遗传算法,蚁群算法等优化算法来优化⽹络,这是后话。
先简单了解了MATLAB中的神经⽹络⼯具箱,⼯具箱功能还是⾮常强⼤的,已经可以拟合出⾮常多的曲线来分析了。
神经⽹络⼯具箱选择(4种)今天下载了⾃带的example跑了⼀次试⼀下选择隐藏神经元个数训练结束后可以在plot查看各种图表,这⾥只对⼯具箱操作做简单介绍最近⼀段时间在研究如何利⽤预测其销量个数,在⽹上搜索了⼀下,发现了很多模型来预测,⽐如利⽤回归模型、时间序列模型,GM(1,1)模型,可是⾃⼰在结合实际的⼯作内容,发现这⼏种模型预测的精度不是很⾼,于是再在⽹上进⾏搜索,发现神经⽹络模型可以来预测,并且有很多是结合时间序列或者SVM(⽀持向量机)等组合模型来进⾏预测,本⽂结合实际数据,选取了常⽤的BP神经⽹络算法,其算法原理,因⽹上⼀⼤堆,所以在此不必⼀⼀展⽰,并参考了这篇博⽂,运⽤matlab 2016a,给出了下⾯的代码,并最终进⾏了预测clcclear allclose all%bp 神经⽹络的预测代码%载⼊输出和输⼊数据load C:\Users\amzon\Desktop\p.txt;load C:\Users\amzon\Desktop\t.txt;%保存数据到matlab的⼯作路径⾥⾯save p.mat;save t.mat;%注意t必须为⾏向量%赋值给输出p和输⼊tp=p;t=t;%数据的归⼀化处理,利⽤mapminmax函数,使数值归⼀化到[-1.1]之间%该函数使⽤⽅法如下:[y,ps] =mapminmax(x,ymin,ymax),x需归化的数据输⼊,%ymin,ymax为需归化到的范围,不填默认为归化到[-1,1]%返回归化后的值y,以及参数ps,ps在结果反归⼀化中,需要调⽤[p1,ps]=mapminmax(p);[t1,ts]=mapminmax(t);%确定训练数据,测试数据,⼀般是随机的从样本中选取70%的数据作为训练数据%15%的数据作为测试数据,⼀般是使⽤函数dividerand,其⼀般的使⽤⽅法如下:%[trainInd,valInd,testInd] = dividerand(Q,trainRatio,valRatio,testRatio)[trainsample.p,valsample.p,testsample.p] =dividerand(p,0.7,0.15,0.15);[trainsample.t,valsample.t,testsample.t] =dividerand(t,0.7,0.15,0.15);%建⽴反向传播算法的BP神经⽹络,使⽤newff函数,其⼀般的使⽤⽅法如下%net = newff(minmax(p),[隐层的神经元的个数,输出层的神经元的个数],{隐层神经元的传输函数,输出层的传输函数},'反向传播的训练函数'),其中p为输⼊数据,t为输%tf为神经⽹络的传输函数,默认为'tansig'函数为隐层的传输函数,%purelin函数为输出层的传输函数%⼀般在这⾥还有其他的传输的函数⼀般的如下,如果预测出来的效果不是很好,可以调节%TF1 = 'tansig';TF2 = 'logsig';%TF1 = 'logsig';TF2 = 'purelin';%TF1 = 'logsig';TF2 = 'logsig';%TF1 = 'purelin';TF2 = 'purelin';TF1='tansig';TF2='purelin';net=newff(minmax(p),[10,1],{TF1 TF2},'traingdm');%⽹络创建%⽹络参数的设置net.trainParam.epochs=10000;%训练次数设置net.trainParam.goal=1e-7;%训练⽬标设置net.trainParam.lr=0.01;%学习率设置,应设置为较少值,太⼤虽然会在开始加快收敛速度,但临近最佳点时,会产⽣动荡,⽽致使⽆法收敛net.trainParam.mc=0.9;%动量因⼦的设置,默认为0.9net.trainParam.show=25;%显⽰的间隔次数%指定训练参数% net.trainFcn = 'traingd'; %梯度下降算法% net.trainFcn = 'traingdm'; %动量梯度下降算法% net.trainFcn = 'traingda'; %变学习率梯度下降算法% net.trainFcn = 'traingdx'; %变学习率动量梯度下降算法% (⼤型⽹络的⾸选算法)% net.trainFcn = 'trainrp'; % RPROP(弹性BP)算法,内存需求最⼩%共轭梯度算法% net.trainFcn = 'traincgf'; %Fletcher-Reeves修正算法% net.trainFcn = 'traincgp'; %Polak-Ribiere修正算法,内存需求⽐Fletcher-Reeves修正算法略⼤% net.trainFcn = 'traincgb'; % Powell-Beal复位算法,内存需求⽐Polak-Ribiere修正算法略⼤% (⼤型⽹络的⾸选算法)%net.trainFcn = 'trainscg'; % ScaledConjugate Gradient算法,内存需求与Fletcher-Reeves修正算法相同,计算量⽐上⾯三种算法都⼩很多% net.trainFcn = 'trainbfg'; %Quasi-Newton Algorithms - BFGS Algorithm,计算量和内存需求均⽐共轭梯度算法⼤,但收敛⽐较快% net.trainFcn = 'trainoss'; % OneStep Secant Algorithm,计算量和内存需求均⽐BFGS算法⼩,⽐共轭梯度算法略⼤% (中型⽹络的⾸选算法)%net.trainFcn = 'trainlm'; %Levenberg-Marquardt算法,内存需求最⼤,收敛速度最快% net.trainFcn = 'trainbr'; %贝叶斯正则化算法% 有代表性的五种算法为:'traingdx','trainrp','trainscg','trainoss', 'trainlm'%在这⾥⼀般是选取'trainlm'函数来训练,其算对对应的是Levenberg-Marquardt算法net.trainFcn='trainlm';[net,tr]=train(net,trainsample.p,trainsample.t);%计算仿真,其⼀般⽤sim函数[normtrainoutput,trainPerf]=sim(net,trainsample.p,[],[],trainsample.t);%训练的数据,根据BP得到的结果[normvalidateoutput,validatePerf]=sim(net,valsample.p,[],[],valsample.t);%验证的数据,经BP得到的结果[normtestoutput,testPerf]=sim(net,testsample.p,[],[],testsample.t);%测试数据,经BP得到的结果%将所得的结果进⾏反归⼀化,得到其拟合的数据trainoutput=mapminmax('reverse',normtrainoutput,ts);validateoutput=mapminmax('reverse',normvalidateoutput,ts);testoutput=mapminmax('reverse',normtestoutput,ts);%正常输⼊的数据的反归⼀化的处理,得到其正式值trainvalue=mapminmax('reverse',trainsample.t,ts);%正常的验证数据validatevalue=mapminmax('reverse',valsample.t,ts);%正常的验证的数据testvalue=mapminmax('reverse',testsample.t,ts);%正常的测试数据%做预测,输⼊要预测的数据pnewpnew=[313,256,239]';pnewn=mapminmax(pnew);anewn=sim(net,pnewn);anew=mapminmax('reverse',anewn,ts);%绝对误差的计算errors=trainvalue-trainoutput;%plotregression拟合图figure,plotregression(trainvalue,trainoutput)%误差图figure,plot(1:length(errors),errors,'-b')title('误差变化图')%误差值的正态性的检验figure,hist(errors);%频数直⽅图figure,normplot(errors);%Q-Q图[muhat,sigmahat,muci,sigmaci]=normfit(errors);%参数估计均值,⽅差,均值的0.95置信区间,⽅差的0.95置信区间[h1,sig,ci]= ttest(errors,muhat);%假设检验figure, ploterrcorr(errors);%绘制误差的⾃相关图figure, parcorr(errors);%绘制偏相关图运⾏之后的,结果如下:BP神经⽹络的结果分析图训练数据的梯度和均⽅误差之间的关系图验证数据的梯度与学习次数残差的正态的检验图(Q-Q图)在⽹上,发现可以通过神经⽹络⼯具箱这个GUI界⾯来创建神经⽹络,其⼀般的操作步骤如下:1:在输⼊命令⾥⾯输⼊nntool命令,或者在应⽤程序这个选项下找到Netrual Net Fitting 这个应⽤程序,点击打开,就能看见如下界⾯2:输⼊数据和输出数据的导⼊(在本⽂中选取了matlab⾃带的案例数据)3:随机选择三种类型的数据所占的样本量的⽐例,⼀般选取默认即可4:隐层神经元的确定5:训练算法的选取,⼀般是选择默认即可,选择完成后点击<train>按钮即可运⾏程序6:根据得到的结果,⼀般是MSE的值越⼩,R值越接近1,其训练的效果⽐较,并第⼆张图给出了神经⽹络的各参数的设置以及其最终的结果,其拟合图R越接近1,模型拟合的更好最终的结果图7:如果所得到的模型不能满⾜你的需求,则需重复上述的步骤直⾄能够得到你想要的精确度8:将最终的得到的各种数据以及其拟合值进⾏保存,然后查看,就可以得到所要的拟合值最后参考了⽹上和MATLAB的帮助,给出了⼀些与神经⽹络相关的函数,希望能够帮助⼤家。
BP神经网络实验报告一、实验目的1、熟悉MATLAB中神经网络工具箱的使用方法;2、通过在MATLAB下面编程实现BP网络逼近标准正弦函数,来加深对BP网络的了解和认识,理解信号的正向传播和误差的反向传递过程。
二、实验原理由于传统的感知器和线性神经网络有自身无法克服的缺陷,它们都不能解决线性不可分问题,因此在实际应用过程中受到了限制。
而BP网络却拥有良好的繁泛化能力、容错能力以及非线性映射能力。
因此成为应用最为广泛的一种神经网络。
BP算法的基本思想是把学习过程分为两个阶段:第一阶段是信号的正向传播过程;输入信息通过输入层、隐层逐层处理并计算每个单元的实际输出值;第二阶段是误差的反向传递过程;若在输入层未能得到期望的输出值,则逐层递归的计算实际输出和期望输出的差值(即误差),以便根据此差值调节权值。
这种过程不断迭代,最后使得信号误差达到允许或规定的范围之内。
正向传播.u I I L I LJ I J I . I I L.I I.J I I . I L I I.J I I I £ I LJ LJ I SI L I L I kJ I I I BJ LJ 1.1 I I I L J I. J I I U I LJ kJ I .1 输入层的片用输船层基于BP算法的多层前馈型网络模型的拓扑结构如上图所示。
BP算法的数学描述:三层BP前馈网络的数学模型如上图所示。
三层前馈网中,输入向量为:X = (% 1, % 2,…,% ,..., x )T ;隐层输入向量为:Y = (y/y 2,..., y .,... y )T ;输出层输出向量 为:O = (o 1,o 2,...,4,…。
.)「期望输出向量为:d = (d 1,d 2,…d 『…dy 。
输入层到隐层之间的 权值矩阵用V 表示,V = (v , v ,…v ,...v ) Y ,其中列向量v 为隐层第j 个神经元对应的权向量; 1 2 j m j隐层到输出层之间的权值矩阵用W 表示,W =(叱,叱,…乜,…%),其中列向量乜为输出层第k 个神经元对应的权向量。
基于MATLAB的BP神经网络工具箱函数最新版本的神经网络工具箱几乎涵盖了所有的神经网络的基本常用模型,如感知器和BP网络等。
对于各种不同的网络模型,神经网络工具箱集成了多种学习算法,为用户提供了极大的方便[16]。
Matlab R2007神经网络工具箱中包含了许多用于BP网络分析与设计的函数,BP网络的常用函数如表3.1所示。
3.1.1BP网络创建函数1) newff该函数用于创建一个BP网络。
调用格式为:net=newffnet=newff(PR,[S1S2..SN1],{TF1TF2..TFN1},BTF,BLF,PF)其中,net=newff;用于在对话框中创建一个BP网络。
net为创建的新BP神经网络;PR为网络输入向量取值范围的矩阵;[S1S2…SNl]表示网络隐含层和输出层神经元的个数;{TFlTF2…TFN1}表示网络隐含层和输出层的传输函数,默认为‘tansig’;BTF表示网络的训练函数,默认为‘trainlm’;BLF表示网络的权值学习函数,默认为‘learngdm’;PF表示性能数,默认为‘mse’。
2)newcf函数用于创建级联前向BP网络,newfftd函数用于创建一个存在输入延迟的前向网络。
3.1.2神经元上的传递函数传递函数是BP网络的重要组成部分。
传递函数又称为激活函数,必须是连续可微的。
BP网络经常采用S型的对数或正切函数和线性函数。
1) logsig该传递函数为S型的对数函数。
调用格式为:A=logsig(N)info=logsig(code)其中,N:Q个S维的输入列向量;A:函数返回值,位于区间(0,1)中;2)tansig该函数为双曲正切S型传递函数。
调用格式为:A=tansig(N)info=tansig(code)其中,N:Q个S维的输入列向量;A:函数返回值,位于区间(-1,1)之间。
3)purelin该函数为线性传递函数。
调用格式为:A=purelin(N)info=purelin(code)其中,N:Q个S维的输入列向量;A:函数返回值,A=N。
3.1.3BP网络学习函数1)learngd该函数为梯度下降权值/阈值学习函数,它通过神经元的输入和误差,以及权值和阈值的学习效率,来计算权值或阈值的变化率。
调用格式为:[dW,ls]=learngd(W,P,Z,N,A,T,E,gW,gA,D,LP,LS)[db,ls]=learngd(b,ones(1,Q),Z,N,A,T,E,gW,gA,D,LP,LS)info=learngd(code)2)learngdm函数为梯度下降动量学习函数,它利用神经元的输入和误差、权值或阈值的学习速率和动量常数,来计算权值或阈值的变化率。
3.1.4BP网络训练函数1)train神经网络训练函数,调用其他训练函数,对网络进行训练。
该函数的调用格式为:[net,tr,Y,E,Pf,Af]=train(NET,P,T,Pi,Ai)[net,tr,Y,E,Pf,Af]=train(NET,P,T,Pi,Ai,VV,TV)2) traingd函数为梯度下降BP算法函数。
traingdm函数为梯度下降动量BP算法函数。
3.2BP网络在函数逼近中的应用3.2.1问题的提出BP网络由很强的映射能力,主要用于模式识别分类、函数逼近、函数压缩等。
下面将通过实例来说明BP网络在函数逼近方面的应用。
要求设计一个BP网络,逼近以下函数:g(x)=1+sin(k*pi/4*x),实现对该非线性函数的逼近。
其中,分别令k=1,2,4进行仿真,通过调节参数(如隐藏层节点个数等)得出信号的频率与隐层节点之间,隐层节点与函数逼近能力之间的关系。
3.2.2基于BP神经网络逼近函数步骤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()函数建立函数网络时,权值和阈值的初始化是随机的,所以网络输出结构很差,根本达不到函数逼近的目的,每次运行的结果也有时不同。
步骤3:网络训练应用train()函数对网络进行训练之前,需要预先设置网络训练参数。
将训练时间设置为50,训练精度设置为0.01,其余参数使用缺省值。
训练后得到的误差变化过程如图3.4所示。
图3.4训练过程net.trainParam.epochs=50; (网络训练时间设置为50)net.trainParam.goal=0.01;(网络训练精度设置为0.01)net=train(net,p,t);(开始训练网络)TRAINLM-calcjx, Epoch 0/50, MSE 9.27774/0.01, Gradient 13.3122/1e-010TRAINLM-calcjx, Epoch 3/50, MSE 0.00127047/0.01, Gradient 0.0337555/1e-010TRAINLM, Performance goal met.从以上结果可以看出,网络训练速度很快,经过一次循环跌送过程就达到了要求的精度0.01。
步骤4:网络测试对于训练好的网络进行仿真:y2=sim(net,p);figure;plot(p,t,'-',p,y1,':',p,y2, '--')title('训练后网络的输出结果');xlabel('时间');ylabel('仿真输出');绘制网络输出曲线,并与原始非线性函数曲线以及未训练网络的输出结果曲线相比较,比较出来的结果如图3.5所示。
图3.5 训练后网络的输出结果其中“”代表要逼近的非线性函数曲线;“‥‥‥”代表未经训练的函数曲线;“―――”代表经过训练的函数曲线;从图中可以看出,得到的曲线和原始的非线性函数曲线很接近。
这说明经过训练后,BP网络对非线性函数的逼近效果比较好。
3.2.3不同频率下的逼近效果改变非线性函数的频率和BP函数隐层神经元的数目,对于函数逼近的效果有一定的影响。
网络非线性程度越高,对于BP网络的要求越高,则相同的网络逼近效果要差一些;隐层神经元的数目对于网络逼近效果也有一定影响,一般来说隐层神经元数目越多,则BP网络逼近非线性函数的能力越强。
下面通过改变频率参数和非线性函数的隐层神经元数目来加以比较证明。
(1)频率参数设为k=2,当隐层神经元数目分别取n=3、n=6时,得到了训练后的网络输出结果如图3.6,3.7所示。
图3.6 当n=3时训练后网络的输出结果图3.7当n=6时训练后网络的输出结果其中“”代表要逼近的非线性函数曲线;“‥‥‥”代表未经训练的函数曲线;“―――”代表经过训练的函数曲线;(2)频率参数设为k=4,当隐层神经元数目分别取n=6、n=8时,得到了训练后的网络输出结果如图3.8,3.9所示。
图3.8 当n=6时训练后网络的输出结果图3.9 当n=8时训练后网络的输出结果其中“”代表要逼近的非线性函数曲线;“‥‥‥”代表未经训练的函数曲线;“―――”代表经过训练的函数曲线;(2)频率参数设为k=8,当隐层神经元数目分别取n=10、n=15时,得到了训练后的网络输出结果如图3.10,3.11所示。
图3.10 当n=10时训练后网络的输出结果图3.11 当n=15时训练后网络的输出结果其中“”代表要逼近的非线性函数曲线;“‥‥‥”代表未经训练的函数曲线;“―――”代表经过训练的函数曲线;3.2.4讨论通过上述仿真结果可知,当k=1,n=3时;k=2,n=6时;k=4,n=8时;k=8,n=15时,BP神经网络分别对函数取得了较好的逼近效果。
由此可见,n取不同的值对函数逼近的效果有很大的影响。
改变BP网络隐层神经元的数目,可以改变BP神经网络对于函数的逼近效果。
隐层神经元数目越多,则BP网络逼近非线性函数的能力越强。
3.3BP网络在样本含量估计中的应用3.3.1问题的提出这是一个神经网络在医学中应用的例子。
拟设计一台仪器,通过对血液样本进行光谱分析来测试血清中胆固醇水平。
共采集了264位病人的血液样本,对其光谱分析共发现21种光谱波长。
对这些病人,通过血清分离,同样也测量了hdl、ldl、vldl胆固醇水平。
(1)将数据导入Matlab工作空间,进行主要成分的分析。
数据文件为choles_all.ma t。
loadcholes_all %matlab中有一个choles_all.mat文件它包含了本问题需要的原始数据[pn,meanp,stdp,tn,meant,stdt]=prestd(p,t); %prestd 函数对样本数据作归一化处理[ptrans,sransMat]=prepca(pn,0.001);%利用 prepca 函数对归一化后的样本数据进行主元分析这里剔除了一些数据,只保留了所占99.9%的主要成分数据。
下面检验一下转换后数据矩阵的大小。
[R,Q]=size(ptrans)R =4Q =264从中可以看出通过主要成分分析,输入数据从21组减少到4组,由此可见原始数据有着很大的冗余度。
(2) 将这些数据分成几个部分,分别用于训练、验证和测试。
将数据的1/4用于验证、1/4用于测试,其余的用于训练网络。
采用等间隔的方式在原始数据中抽取出这些数据。