还剩17页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
HYPERLINKhttp://hi.baidu.com/index.htmINCLUDEPICTUREhttp://img.baidu.com/hi/img/ihome/logo.gif\*MERGEFORMAT窗体顶端用户名: __:登录http://hi.baidu.com/%B4%F0%B0%B8%B7%D6%CF%ED%BF%D5%BC%E4/blog/item/3e0c8bab023aa7a6ca130c
08.html\l#窗体底端注册http://hi.baidu.com/reg/new矿业人生~的空间http://hi.baidu.com/%B4%F0%B0%B8%B7%D6%CF%ED%BF%D5%BC%E4/home\o快来下啊的空间http://hi.baidu.com/答案__空间 主页http://hi.baidu.com/%B4%F0%B0%B8%B7%D6%CF%ED%BF%D5%BC%E4/home__http://hi.baidu.com/%B4%F0%B0%B8%B7%D6%CF%ED%BF%D5%BC%E4/blog相册http://hi.baidu.com/%B4%F0%B0%B8%B7%D6%CF%ED%BF%D5%BC%E4/album|个人档案http://hi.baidu.com/%B4%F0%B0%B8%B7%D6%CF%ED%BF%D5%BC%E4/profile|好友http://hi.baidu.com/%B4%F0%B0%B8%B7%D6%CF%ED%BF%D5%BC%E4/friends|i__http://tieba.baidu.com/i/sys/jumpun=快来下啊fr=spa__bar\t_blank 查看文章 【转】考拉BP神经网络的__tlab实现学习历程
(一)2011-05-0712:51转载自__http://apps.hi.baidu.com/share\tblank最终编辑dluthmhttp://hi.baidu.com/dluthm\tblank考拉BP神经网络的__tlab实现学习历程
(一)本文《考拉BP神经网络的__tlab实现学习历程》系列由__超级版主akjuan整理和原创,我们在此表示特别感谢这两天在学习bp,总结和汇报一下,和大家一起学习希望初入神经网络能有所收获,给新手一些帮组和启发也希望熟悉bp的高手,多提宝贵意见和建议学习内容总结成五个小节,具体内容如下第一节内容包括神经网络的基础知识,BP网络的特点,bp主要应用的场合,使用时应注意的问题第二节内容主要是阐述BP中几个容易混绕的概念和问题,包括什么是网络的泛化能力?过拟合是什么,怎么处理?学习速率有什么作用?神经网络的权值和阈值分别是个什么概念?用BP逼近非线性函数,如何提高训练精度?第三节内容主要阐述使用__tlab实现,为了充分利用数据,得到最优的网络训练结果,在网络建立前,应该进行的基本数据处理问题,包括BP神经网络__tlab实现的基本步骤,数据归一化问题和方法,输入训练数据的乱序排法,以及分类方法,如何查看和保存训练的结果,每次结果不一样问题第四节内容bp神经网络进行交通预测的__tlab例子及源代码,bp神经网络进行交通预测的__tlab程序的优化(主要是按设置误差要求,寻找最优网络过程)第五节内容bp神经网络处理蠓虫分类问题的__tlab例子及源代码不多说,先如主题,第一节,很基础,高手见谅什么是神经网络?神经网络是由很多神经元组成的,首先我们看一下,什么是神经元http://blog.
163.com/public/target_blank.html\l##zoomHYPERLINKhttp://img.bimg.
126.net/photo/V8ZYv0jbT-Ee4f4Ys9Jpzw==/
3962604722133983950.jpg\t_blankINCLUDEPICTUREhttp://img.bimg.
126.net/photo/V8ZYv0jbT-Ee4f4Ys9Jpzw==/
3962604722133983950.jpg\*MERGEFORMAT上面这个图表示的就是一个神经元,我们不管其它书上说的那些什么树突,轴突的我用个比较粗浅的解释,可能不太全面科学,但对初学者很容易理解
1、我们把输入__看成你在__tlab中需要输入的数据,输进去神经网络后
2、这些数据的每一个都会被乘个数,即权值w,然后这些东东与阀值b相加后求和得到u,
3、上面只是线性变化,为了达到能处理非线性的目的,u做了个变换,变换的规则和传输函数有关可能还有人问,那么那个阀值是什么呢?简单理解就是让这些数据做了个平移,这就是神经元工作的过程处理后的结果又作为输入,可输给别的神经元,很多这样的神经元,就组成了网络在__tlab中具体用什么算法实现这些,我们先不管,我们需要注意的是怎么使用比如使用BP的神经网络newff构建一个网络,这些在后面的学习将提到BP网络的特点
①网络实质上实现了一个从输入到输出的映射功能,而数学理论已证明它具有实现任何复杂非线性映射的功能这使得它特别适合于求解内部机制复杂的问题我们无需建立模型,或了解其内部过程,只需输入,获得输出只要BPNN结构优秀,一般20个输入函数以下的问题都能在50000次的学习以内收敛到最低误差附近而且理论上,一个三层的神经网络,能够以任意精度逼近给定的函数,这是非常诱人的期望;
②网络能通过学习带正确答案的实例集自动提取“合理的”求解规则,即具有自学习能力;
③网络具有一定的__、概括能力bp主要应用回归预测(可以进行拟合,数据处理分析,事物预测,控制等)、分类识别(进行类型划分,模式识别等),在后面的学习中,我都将给出实例程序但无论那种网络,什么方法,解决问题的精确度都无法打到100%的,但并不影响其使用,因为现实中很多复杂的问题,精确的解释是毫无意义的,有意义的解析必定会损失精度BP注意问题
1、BP算法的学习速度很慢,其原因主要有a由于BP算法本质上为梯度下降法,而它所要优化的目标函数又非常复杂,因此,必然会出现“锯齿形现象”,这使得BP算法低效;b存在麻痹现象,由于优化的目标函数很复杂,它必然会在神经元输出接近0或1的情况下,出现一些平坦区,在这些区域内,权值误差改变很小,使训练过程几乎停顿;c为了使网络执行BP算法,不能用传统的一维搜索法求每次迭代的步长,而必须把步长的更新规则预先赋予网络,这种方法将引起算法低效
2、网络训练失败的可能性较大,其原因有a从数学角度看,BP算法为一种局部搜索的优化方法,但它要解决的问题为求解复杂非线性函数的全局极值,因此,算法很有可能陷入局部极值,使训练失败;b网络的逼近、__能力同学习样本的典型性密切相关,而从问题中选取典型样本实例组成训练集是一个很困难的问题
3、网络结构的选择尚无一种统一而完整的理论指导,一般只能由经验选定为此,有人称神经网络的结构选择为一种艺术而网络的结构直接影响网络的逼近能力及__性质因此,应用中如何选择合适的网络结构是一个重要的问题
4、新加入的样本要影响已学习成功的网络,而且刻画每个输入样本的特征的数目也必须相同
5、采用s型激活函数,由于输出层各神经元的理想输出值只能接近于1或0,而不能打到1或0,因此设置各训练样本的期望输出分量Tkp时,不能设置为1或0,设置
0.9或
0.1较为适宜考拉BP神经网络的__tlab实现学习历程
(二)本文《考拉BP神经网络的__tlab实现学习历程》系列由__超级版主akjuan整理和原创,我们在此表示特别感谢本节主要学习BP中几个容易混绕的概念和问题什么是网络的泛化能力?过拟合是什么,怎么处理?学习速率有什么作用?神经网络的权值和阈值分别是个什么概念?用BP逼近非线性函数,如何提高训练精度?什么是网络的泛化能力?一个神经网路是否优良,与传统最小二乘之类的拟合评价不同(主要依据残差,拟合优度等),不是体现在其对已有的数据拟合能力上,而是对后来的预测能力,既泛化能力网络的预测能力(也称泛化能力、__能力)与训练能力(也称逼近能力、学习能力)的矛盾一般情况下,训练能力差时,预测能力也差,并且一定程度上,随训练能力地提高,预测能力也提高但这种趋势有一个极限,当达到此极限时,随训练能力的提高,预测能力反而下降,即出现所谓“过拟合”现象此时,网络学习了过多的样本细节,而不能反映样本内含的规律过拟合是什么,怎么处理?神经网络计算不能一味地追求训练误差最小,这样很容易出现“过拟合”现象,只要能够实时检测误差率的变化就可以确定最佳的训练次数,比如15000次左右的学习次数,如果你不观察,设成500000次学习,不仅需要很长时间来跑,而且最后结果肯定令人大失所望避免过拟合的一种方法是在数据输入中,给训练的数据分类,分为正常训练用、变量数据、测试数据,在后面节将讲到如何进行这种分类其中变量数据,在网络训练中,起到的作用就是防止过拟合状态学习速率有什么作用?学习速率这个参数可以控制能量函数的步幅,并且如果设为自动调整的话,可以在误差率经过快速下降后,将学习速率变慢,从而增加BPNN的稳定性此时训练方法采用__内容到剪贴板代码:DEnet.trainFcn=traingda;%变学习率梯度下降算法net.trainFcn=traingdx;%变学习率动量梯度下降算法DE可以定义一个变动的学习速率,如__内容到剪贴板代码:DEp=[-1-122;0505];t=[-1-111];net=newffpt3{}traingda;net.trainParam.lr=
0.05;net.trainParam.lr_inc=
1.05;net=trainnetpt;y=simnetpDE在后面的拟合例题中,我们也将用到学习速率这个参数神经网络的权值和阈值分别是个什么概念?第一节中,我们已经谈到了权值和阀值的概念这里我们更深入的说明一下,因为他们很重要,关系到网络最后的结果权值和阈值是神经元之间的连接,将数据输入计算出一个输出,然后与实际输出比较,误差反传,不断调整权值和阈值假如下面两个点属于不同的类,须设计分类器将他们分开引用:p1=[11-1];p2=[1-1-1];这里用单层神经元感知器,假设初始权值__内容到剪贴板代码:DEw=[
0.
20.
20.3]DE同时假设初始阀值__内容到剪贴板代码:DEb=-
0.3DE输出a1a2__内容到剪贴板代码:DEa1=hardlimsw*p1+ba2=hardlimsw*p2+bDE如果不能分开,还须不断调整wb用BP逼近非线性函数,如何提高训练精度1调整网络结构增加网络的层数可以进一步降低误差,提高精度但会使网络复杂化,从而增加网络的训练时间精度的提高实际上也可以通过增加隐层神经元的数目来获得,其效果更容易观察和掌握,所以应优先考虑2初始值选取为了使误差尽可能小,需要合理选择初始权重和偏置,如果太大就容易陷入饱和区,导致停顿一般应选为均匀分布的小数,介于-1,13学习速率调整学习速率的选取很重要,大了可能导致系统不稳定,小了会导致训练周期过长、收敛慢,达不到要求的误差一般倾向于选取较小的学习速率以保持系统稳定,通过观察误差下降曲线来判断下降较快说明学习率比较合适,若有较大振荡则说明学习率偏大同时,由于网络规模大小的不同,学习率选择应当针对其进行调整采用变学习速率的方案,令学习速率随学习进展而逐步减少,可收到良好的效果4期望误差期望误差当然希望越小越好,但是也要有合适值考拉BP神经网络的__tlab实现学习历程
(三)本文《考拉BP神经网络的__tlab实现学习历程》系列由__超级版主akjuan整理和原创,我们在此表示特别感谢本节主要学习使用__tlab实现bp算法的一般步骤和过程为了充分利用数据,得到最优的网络训练结果,在网络建立前应该进行的基本数据处理问题,包括1BP神经网络__tlab实现的基本步骤2数据归一化问题和方法3输入训练数据的乱序排法,以及分类方法4如何查看和保存训练的结果5每次结果不一样问题用__tlab实现bp,其实很简单,按下面步骤基本可以了BP神经网络__tlab实现的基本步骤
1、数据归一化
2、数据分类,主要包括打乱数据顺序,抽取正常训练用数据、变量数据、测试数据
3、建立神经网络,包括设置多少层网络(一般3层以内既可以,每层的节点数(具体节点数,尚无科学的模型和公式方法确定,可采用试凑法,但输出层的节点数应和需要输出的量个数相等),设置隐含层的传输函数等关于网络具体建立使用方法,在后几节的例子中将会说到
4、指定训练参数进行训练,这步非常重要,在例子中,将详细进行说明
5、完成训练后,就可以调用训练结果,输入测试数据,进行测试
6、数据进行反归一化
7、误差分析、结果预测或分类,作图等数据归一化问题归一化的意义首先说一下,在工程应用领域中,应用BP网络的好坏最关键的仍然是输入特征选择和训练样本集的准备,若样本集代表性差、矛盾样本多、数据归一化存在问题,那么,使用多复杂的综合算法、多精致的网络结构,建立起来的模型预测效果不会多好若想取得实际有价值的应用效果,从最基础的数据整理工作做起吧,会少走弯路的归一化是为了加快训练网络的收敛性,具体做法是1把数变为(0,1)之间的小数主要是为了数据处理方便提出来的,把数据映射到0~1范围之内处理,更加便捷快速,应该归到数字__处理范畴之内2把有量纲表达式变为无量纲表达式归一化是一种简化计算的方式,即将有量纲的表达式,经过变换,化为无量纲的表达式,成为纯量比如,复数阻抗可以归一化书写Z=R+jωL=R1+jωL/R,复数部分变成了纯数量了,没有量纲另外,微波之中也就是电路分析、__系统、电磁波传输等,有很多运算都可以如此处理,既保证了运算的便捷,又能凸现出物理量的本质含义神经网络归一化方法由于采集的各数据单位不一致,因而须对数据进行[-11]归一化处理,归一化方法主要有如下几种,供大家参考
1、线性函数转换,表达式如下__内容到剪贴板代码:DEy=x-MinValue/__xValue-MinValueDE说明x、y分别为转换前、后的值,__xValue、MinValue分别为样本的最大值和最小值
2、对数函数转换,表达式如下__内容到剪贴板代码:DEy=log10xDE说明以10为底的对数函数转换
3、反余切函数转换,表达式如下__内容到剪贴板代码:DEy=atanx*2/PIDE__tlab中归一化的实现__tlab中的归一化处理有五种方法,只会其中一种就可以了,我喜欢用第4种,因为习惯和方便注意第一组和第二组归一化函数在__tlab
7.0以上已遗弃,他们的用法相似,pre**是归一化,post**是反归一化,tram**是使用同样的设置归一化另外一组数据
1.内部函数prem__x、postm__x、tram__x,将数据归一化到-11prem__x的语法格式是__内容到剪贴板代码:DE[Pnminp__xpTnmint__xt]=prem__xPTDE其中P,T分别为原始输入和输出数据,minp和__xp分别为P中的最小值和最大值mint和__xt分别为T的最小值和最大值我们在训练网络时,如果所用的是经过归一化的样本数据,那么以后使用网络时所用的新数据也应该和样本数据接受相同的预处理,这就要用到tram__x,换句话说使用同一个归一化设置setting归一化另外一组数据如下所示__内容到剪贴板代码:DE[Pn]=tram__xPminp__xpDE其中P和Pn分别为变换前、后的输入数据,__xp和minp分别为prem__x函返回的最大值__xp和最小值minp
2、prestd、poststd、trastd归化数据到01用法与1差不多详细可以helpprestd上述两种方法是可以相互转化的,比如,第一种归化后的数据为p,则1+p./2的结果就是第二种了
3、__pmin__x将数据归一化到-11,是
6.5中**m__x系列的替换函数该函数同时可以执行归一化、反归一化和归一化其他数据的功能,具体看帮助和后面的实例__内容到剪贴板代码:DE%归一化数据输入为p,输出为t[normInputps]=__pmin__xp;[normTargetts]=__pmin__xt;%反归一化trainOutput=__pmin__xreversenormTrainOutputts;trainInsect=__pmin__xreversetrainSamples.Tts;validateOutput=__pmin__xreversenormValidateOutputts;validateInsect=__pmin__xreversevalidateSamples.Tts;testOutput=__pmin__xreversenormTestOutputts;testInsect=__pmin__xreversetestSamples.Tts;%例子x1=[124;111;322;000][y1PS]=__pmin__xx101%归化到
[01],若不填,则默认为[-11]%还原x1_again=__pmin__xreversey1PSDE
4、__pstd将数据归一化到01,是
6.5中**std系列的替代函数同理,3和4两种方法是可以相互转化的,比如,第一种归化后的数据为p,则1+p./2的结果就是第二种了
5、自己写归一化函数,这个网上很多,大家可以百度下输入训练数据的乱序排法,以及分类注意dividevec函数在
7.6版本还可以使用把数据重新打乱顺序,进行输入,可以让数据更加具备典型性和更优良的泛化能力!把数据进行打乱,并分类为训练输入数据、变量数据、测试数据的方法我用百度搜了一下,发现有些方法,但居然很少看到使用__tlab内部函数直接进行的,其实__tlab自带的内部函数dividevec,完全能胜任上述工作,推荐!但这个存在一个问题是,因为打乱了,最后分析结果的时候,数据重新排列困难,因为丢失了数据在数组中的位置参数具体用法可以参见下面我的bp交通预测的例子因为我用的
7.0版本,NeuralNetworkToolboxVersion
5.
0.2 R2007a昨天,我去__thworks公司查看了一下nnet的新手册,上述问题得到了解决,里面视乎没有介绍dividverc这个函数了,但增加了新的函数来完成上述功能,并返回标号(手头没装新版本NeuralNetworkToolbox Version
6.0 R2008a),看guide大概是这个意思有新版本的,可以试一下,这个函数是不是这个意思divideblock,divideind,divideint和dividerand上述函数,用法和功能基本相同,只是打乱的方法不一样,分别是block方法抽取、按数组标号自定义抽取、交错索引抽取和随机抽下面以divideblock为例,讲解其基本用法__内容到剪贴板代码:DE[trainVvalVtestVtrainIndvalIndtestInd]=divideblockallVtrainRatiovalRatiotestRatio[训练数据变量数据测试数据训练数据矩阵的标号变量数据标号测试数据标号]=divideblock所有数据训练数据百分比变量数据百分比测试数据百分比DE其实dividevec和后面四个分类函数的区别在于,dividevec一般直接在__tlab代码中调用而后面四个函数是通过设置网络的divideFcn函数来实现,比如,net.divideFcn=divideblock,但不是说不可以在代码中像dividevec直接调用如何查看和保存结果训练好的权值、阈值的输出方法是输入到隐层权值__内容到剪贴板代码:DEw1=net.iw{11}DE隐层阈值__内容到剪贴板代码:DEtheta1=net.b{1}DE隐层到输出层权值__内容到剪贴板代码:DEw2=net.lw{21};DE输出层阈值__内容到剪贴板代码:DEtheta2=net.b{2}DE训练好的BP神经网络保存__内容到剪贴板代码:DE%保存s__efile_namenet_name%__tlab自动将网络保存为__t数据文件,下次使用时可以直接载入%载入loadfile_nameDE每次结果不一样问题因为每次初始化网络时都是随机的,而且训练终止时的误差也不完全相同,结果训练后的权植和阀也不完全相同(大致是一样的),所以每次训练后的结果也略有不同找到比较好的结果后,用命令s__efilen_amenet_name保存网络,可使预测的结果不会变化,在需要的调用时用命令loadfilename载入关于如何找到比较好的结果,进行保存,可以设置误差,在循环中保存,具体使用可以参看bp交通预测优化后的例子考拉BP神经网络的__tlab实现学习历程
(四)—bp神经网络进行交通预测的__tlab源代码本文《考拉BP神经网络的__tlab实现学习历程》系列由__超级版主akjuan整理和原创,我们在此表示特别感谢根据前面三节的学习内容,可以基本编写一个BP神经网络,来处理一些问题了下面我给出一个bp神经网络进行交通预测的__tlab源代码,里面备有较为详细的注释,供给初学者!__内容到剪贴板代码:DE%bp神经网络进行交通预测的__tlab源代码%BP神经网络用于预测%使用平台-__tlab
7.0%数据为1986年到2000年的交通量,网络为3输入,1输出%15组数据,其中9组为正常训练数据,3组为变量数据,3组为测试数据%byakjuan%allrightspreservedby___.4__th.cn%
2008.11clcclear%---------------------------------------------------%原始数据%---------------------------------------------------year=1986:2000;%数据是从1986到2000年的p=[493372445;372445176;445176235;176235378;235378429;...378429561;429561651;561651467;651467527;467527668;...527668841;668841526;841526480;526480567;480567685];%输入数据,共15组,每组3个输入t=
[176235378429561651467527668841526480567685507];%输出数据,共15组,每组1个输出%---------------------------------------------------%数据归一化处理%__pmin__x函数默认将数据归一化到[-11],调用形式如下%[yps]=%__pmin__xxyminy__x%x需归化的数据输入%ymin,y__x为需归化到的范围,不填默认为归化到[-11]%y归一化后的样本数据%ps处理设置,ps主要在结果反归一化中需要调用,或者使用同样的settings归一化另外一组数据%---------------------------------------------------[normInputps]=__pmin__xp;[normTargetts]=__pmin__xt;%---------------------------------------------------%数据乱序,及分类处理%将输入的15组数据的20%,即3组,用来作为测试数据;%样本的20%,即3组,用来作为变化数据;%另外9组用来正常输入,用来训练;%dividevec用来重新随机抽取上述三种分类的数据,原来的顺序被打乱%函数调用的语法%[trainVvalVtestV]=dividevecptvalPer__nttestPer__nt%输入p为输入数据,t为输出数据%valPer__nt为训练用的变化数据在总输入中的百分比%testPer__nt为训练用的测试数据在总输入中的百分比%输出trainVvalVtestV分别为按乱序及相应百分比,抽取得到的数据%另外,打乱后的数据,p和t都是对应的,请放心使用%---------------------------------------------------testPer__nt=
0.20; %AdjustasdesiredvalidatePer__nt=
0.20; %Adustasdesired[trainSamplesvalidateSamplestestSamples]=dividevecnormInputnormTargetvalidatePer__nttestPer__nt;%---------------------------------------------------%设置网络参数%---------------------------------------------------NodeNum1=20;%隐层第一层节点数NodeNum2=40;%隐层第二层节点数TypeNum=1;%输出维数TF1=tansig;TF2=tansig;TF3=tansig;%各层传输函数,TF3为输出层传输函数%如果训练结果不理想,可以尝试更改传输函数,以下这些是各类传输函数%TF1=tansig;TF2=logsig;%TF1=logsig;TF2=purelin;%TF1=tansig;TF2=tansig;%TF1=logsig;TF2=logsig;%TF1=purelin;TF2=purelin;%注意创建BP网络函数newff的参数调用,在新版本
7.6中已改变net=newffmin__xnormInput[NodeNum1NodeNum2TypeNum]{TF1TF2TF3}traingdx;%创建四层BP网络%---------------------------------------------------%设置训练参数%---------------------------------------------------net.trainParam.epochs=_____;%训练次数设置net.trainParam.goal=1e-6;%训练目标设置net.trainParam.lr=
0.01;%学习率设置应设置为较少值,太大虽然会在开始加快收敛速度,但临近最佳点时,会产生动荡,而致使无法收敛%---------------------------------------------------%指定训练函数%---------------------------------------------------%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;%ScaledConjugateGra___nt算法内存需求与Fletcher-Reeves修正算法相同计算量比上面三种算法都小很多%net.trainFcn=trainbfg;%Quasi-NewtonAlgorithms-BFGSAlgorithm计算量和内存需求均比共轭梯度算法大但收敛比较快%net.trainFcn=trainoss;%OneStepSecantAlgorithm计算量和内存需求均比BFGS算法小比共轭梯度算法略大%%中型网络的首选算法%net.trainFcn=trainlm;%Levenberg-__rquardt算法内存需求最大收敛速度最快%net.trainFcn=trainbr;%贝叶斯正则化算法%%有代表性的五种算法为:traingdxtrainrptrainscgtrainosstrainlmnet.trainfcn=traingdm;[nettr]=trainnettrainSamples.PtrainSamples.T[][]validateSamplestestSamples;%---------------------------------------------------%训练完成后,就可以调用sim函数,进行仿真了%---------------------------------------------------[normTrainOutputPfAfEtrainPerf]=simnettrainSamples.P[][]trainSamples.T;%正常输入的9组p数据,BP得到的结果t[normValidateOutputPfAfEvalidatePerf]=simnetvalidateSamples.P[][]validateSamples.T;%用作变量3的数据p,BP得到的结果t[normTestOutputPfAfEtestPerf]=simnettestSamples.P[][]testSamples.T;%用作测试的3组数据p,BP得到的结果t%---------------------------------------------------%仿真后结果数据反归一化,如果需要预测,只需将预测的数据P填入%将获得预测结果t%--------------------------------------------------- trainOutput=__pmin__xreversenormTrainOutputts;%正常输入的9组p数据,BP得到的归一化后的结果ttrainInsect=__pmin__xreversetrainSamples.Tts;%正常输入的9组数据tvalidateOutput=__pmin__xreversenormValidateOutputts;%用作变量3的数据p,BP得到的归一化的结果tvalidateInsect=__pmin__xreversevalidateSamples.Tts;%用作变量3的数据ttestOutput=__pmin__xreversenormTestOutputts;%用作变量3组数据p,BP得到的归一化的结果ttestInsect=__pmin__xreversetestSamples.Tts;%用作变量3组数据t%---------------------------------------------------%数据分析和绘图%--------------------------------------------------- figureplot1:12[trainOutputvalidateOutput]b-1:12[trainInsectvalidateInsect]g--13:15testOutputm*13:15testInsectro;titleo为真实值,*为预测值xlabel年份;ylabel交通量(辆次/昼夜);DE运行后的结果如下图,注意该程序是在
7.0版本上实验的,没法在
6.5版本运行,因为
6.5版本的归一化函数被遗弃了;在
7.6以上版本没有没法运行,因为newff函数参数形式改变了但是只要将上面提到部分相应修改下,就可以运行了正常数据,是用来正常训练用变量数据,主要目的是防止训练中出现过拟合状态测试数据,是用来看训练效果的HYPERLINKhttp://img.bimg.
126.net/photo/t7_6qQAt5Vio852ljr-vVg==/
3962604722133983965.jpg\t_blankINCLUDEPICTUREhttp://img.bimg.
126.net/photo/t7_6qQAt5Vio852ljr-vVg==/
3962604722133983965.jpg\*MERGEFORMAT考拉BP神经网络的__tlab实现学习历程
(五)—bp神经网络进行交通预测程序优化本文《考拉BP神经网络的__tlab实现学习历程》系列由__超级版主akjuan整理和原创,我们在此表示特别感谢在第四节,给出的BP网络进行交通预测的程序,是个基本模式,更改少数几处参数后,可用于其它方面!但通过程序运行后,可以看出,预测效果并不理想,如何得到理想的预测训练结果,下面是基本思路及__tlab的实现
1、设置一个误差项,为测试数据的网络仿真结果和实际结果偏差,并设置一个自己能接受的精度值
2、每次训练网络后,将这个误差和设置值比较,也可通过测试获得网络能给出的最高预测精度
3、得到满意训练网络后,保存BP结果,以便下次调用下面这个程序是在第四节程序基础上优化而来,可以运行前面的程序和这个程序,比较两者的差别,可以通过修改eps来控制预测的误差!__内容到剪贴板代码:DE%bp神经网络进行交通预测的__tlab源代码%BP神经网络用于预测%使用平台-__tlab
7.0%数据为1986年到2000年的交通量,网络为3输入,1输出%15组数据,其中9组为正常训练数据,3组为变量数据,3组为测试数据%byakjuan%allrightspreservedby___.__tlabsky.cn%
2008.11clcclearAll_error=[];%所有误差存储%---------------------------------------------------%原始数据%---------------------------------------------------year=1986:2000;%数据是从1986到2000年的p=[493372445;372445176;445176235;176235378;235378429;...378429561;429561651;561651467;651467527;467527668;...527668841;668841526;841526480;526480567;480567685];%输入数据,共15组,每组3个输入t=
[176235378429561651467527668841526480567685507];%输出数据,共15组,每组1个输出%---------------------------------------------------%数据归一化处理%__pmin__x函数默认将数据归一化到[-11],调用形式如下%[yps]=%__pmin__xxyminy__x%x需归化的数据输入%ymin,y__x为需归化到的范围,不填默认为归化到[-11]%y归一化后的样本数据%ps处理设置,ps主要在结果反归一化中需要调用,或者使用同样的settings归一化另外一组数据%---------------------------------------------------[normInputps]=__pmin__xp;[normTargetts]=__pmin__xt;%---------------------------------------------------%数据乱序,及分类处理%将输入的15组数据的20%,即3组,用来作为测试数据;%样本的20%,即3组,用来作为变化数据;%另外9组用来正常输入,用来训练;%dividevec用来重新随机抽取上述三种分类的数据,原来的顺序被打乱%函数调用的语法%[trainVvalVtestV]=dividevecptvalPer__nttestPer__nt%输入p为输入数据,t为输出数据%valPer__nt为训练用的变化数据在总输入中的百分比%testPer__nt为训练用的测试数据在总输入中的百分比%输出trainVvalVtestV分别为按乱序及相应百分比,抽取得到的数据%另外,打乱后的数据,p和t都是对应的,请放心使用%---------------------------------------------------testPer__nt=
0.20; %AdjustasdesiredvalidatePer__nt=
0.20; %Adustasdesired[trainSamplesvalidateSamplestestSamples]=dividevecnormInputnormTargetvalidatePer__nttestPer__nt;forj=1:200%---------------------------------------------------%设置网络参数%---------------------------------------------------NodeNum1=20;%隐层第一层节点数NodeNum2=40;%隐层第二层节点数TypeNum=1;%输出维数TF1=tansig;TF2=tansig;TF3=tansig;%各层传输函数,TF3为输出层传输函数%如果训练结果不理想,可以尝试更改传输函数,以下这些是各类传输函数%TF1=tansig;TF2=logsig;%TF1=logsig;TF2=purelin;%TF1=tansig;TF2=tansig;%TF1=logsig;TF2=logsig;%TF1=purelin;TF2=purelin;net=newffmin__xnormInput[NodeNum1NodeNum2TypeNum]{TF1TF2TF3}traingdx;%网络创建%---------------------------------------------------%设置训练参数%---------------------------------------------------net.trainParam.epochs=_____;%训练次数设置net.trainParam.goal=1e-6;%训练目标设置net.trainParam.lr=
0.01;%学习率设置应设置为较少值,太大虽然会在开始加快收敛速度,但临近最佳点时,会产生动荡,而致使无法收敛%---------------------------------------------------%指定训练参数%---------------------------------------------------%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;%ScaledConjugateGra___nt算法内存需求与Fletcher-Reeves修正算法相同计算量比上面三种算法都小很多%net.trainFcn=trainbfg;%Quasi-NewtonAlgorithms-BFGSAlgorithm计算量和内存需求均比共轭梯度算法大但收敛比较快%net.trainFcn=trainoss;%OneStepSecantAlgorithm计算量和内存需求均比BFGS算法小比共轭梯度算法略大%%中型网络的首选算法%net.trainFcn=trainlm;%Levenberg-__rquardt算法内存需求最大收敛速度最快%net.trainFcn=trainbr;%贝叶斯正则化算法%%有代表性的五种算法为:traingdxtrainrptrainscgtrainosstrainlmnet.trainfcn=traingdm;[nettr]=trainnettrainSamples.PtrainSamples.T[][]validateSamplestestSamples;%---------------------------------------------------%训练完成后,就可以调用sim函数,进行仿真了%---------------------------------------------------[normTrainOutputPfAfEtrainPerf]=simnettrainSamples.P[][]trainSamples.T;%正常输入的9组p数据,BP得到的结果t[normValidateOutputPfAfEvalidatePerf]=simnetvalidateSamples.P[][]validateSamples.T;%用作变量3的数据p,BP得到的结果t[normTestOutputPfAfEtestPerf]=simnettestSamples.P[][]testSamples.T;%用作测试的3组数据p,BP得到的结果t%---------------------------------------------------%仿真后结果数据反归一化,如果需要预测,只需将预测的数据P填入%将获得预测结果t%--------------------------------------------------- trainOutput=__pmin__xreversenormTrainOutputts;%正常输入的9组p数据,BP得到的归一化后的结果ttrainInsect=__pmin__xreversetrainSamples.Tts;%正常输入的9组数据tvalidateOutput=__pmin__xreversenormValidateOutputts;%用作变量3的数据p,BP得到的归一化的结果tvalidateInsect=__pmin__xreversevalidateSamples.Tts;%用作变量3的数据ttestOutput=__pmin__xreversenormTestOutputts;%用作变量3组数据p,BP得到的归一化的结果ttestInsect=__pmin__xreversetestSamples.Tts;%用作变量3组数据t%绝对误差计算absTrainError=trainOutput-trainInsect;absTestError=testOutput-testInsect;error_sum=sqrtabsTestError
1.^2+absTestError
2.^2+absTestError
3.^2;All_error=[All_errorerror_sum];eps=90;%其为3组测试数据的标准差,或者每个数据偏差在一定范围内而判别ifabsabsTestError1=30absabsTestError2=30absabsTestError3=30|error_sum=epss__emynetdatanet breakendjendjMin_error_sqrt=minAll_errortestOutputtestInsect%---------------------------------------------------%数据分析和绘图%--------------------------------------------------- figureplot1:12[trainOutputvalidateOutput]b-1:12[trainInsectvalidateInsect]g--13:15testOutputm*13:15testInsectro;titleo为真实值,*为预测值xlabel年份;ylabel交通量(辆次/昼夜);figurexx=1:lengthAll_error;plotxxAll_errortitle误差变化图DE运行后的结果如下图,注意该程序是在
7.0版本上实验的,没法在
6.5版本运行,因为
6.5版本的归一化函数被遗弃了;在
7.6以上版本没有没法运行,因为newff函数参数形式改变了但是只要将上面提到部分相应修改下,就可以运行了正常数据,是用来正常训练用变量数据,主要目的是防止训练中出现过拟合状态测试数据,是用来看训练效果的HYPERLINKhttp://img.bimg.
126.net/photo/t7_6qQAt5Vio852ljr-vVg==/
3962604722133983965.jpg\t_blankINCLUDEPICTUREhttp://img.bimg.
126.net/photo/t7_6qQAt5Vio852ljr-vVg==/
3962604722133983965.jpg\*MERGEFORMATHYPERLINKhttp://img.bimg.
126.net/photo/maJBJEeXvaC7KaGaBdeJ-A==/
3962604722133984001.jpg\t_blankINCLUDEPICTUREhttp://img.bimg.
126.net/photo/maJBJEeXvaC7KaGaBdeJ-A==/
3962604722133984001.jpg\*MERGEFORMATHYPERLINKhttp://img.bimg.
126.net/photo/LzaFEzpZBJeywX9pbJin_Q==/
3962604722133984002.jpg\t_blankINCLUDEPICTUREhttp://img.bimg.
126.net/photo/LzaFEzpZBJeywX9pbJin_Q==/
3962604722133984002.jpg\*MERGEFORMAT类别默认分类http://hi.baidu.com/%B4%F0%B0%B8%B7%D6%CF%ED%BF%D5%BC%E4/blog/category/%C4%AC%C8%CF%B7%D6%C0%E0\o查看该分类中所有文章|HYPERLINKhttp://hi.baidu.com/%B4%F0%B0%B8%B7%D6%CF%ED%BF%D5%BC%E4/blog/item/3e0c8bab023aa7a6ca130c
08.html\l#\t_blankINCLUDEPICTUREhttp://img.baidu.com/hi/apps/share/share_btn.gif\*MERGEFORMAT|添加到搜藏http://cang.baidu.com/do/add\o将此文章添加到百度搜藏\t_blank|__到i__http://hi.baidu.com/%B4%F0%B0%B8%B7%D6%CF%ED%BF%D5%BC%E4/blog/item/3e0c8bab023aa7a6ca130c
08.html\l#\o将此文章__到i__\t_blank|浏览77|评论http://hi.baidu.com/%B4%F0%B0%B8%B7%D6%CF%ED%BF%D5%BC%E4/blog/item/3e0c8bab023aa7a6ca130c
08.html\lsend#send 0 上一篇2010高教社杯全国大学生数学建模...http://hi.baidu.com/%B4%F0%B0%B8%B7%D6%CF%ED%BF%D5%BC%E4/blog/item/d8cd7212efc55507b9127bb
1.html\o2010高教社杯全国大学生数学建模竞赛C题论文2(源程序) 下一篇模糊神经网络算法之__TLAB实现http://hi.baidu.com/%B4%F0%B0%B8%B7%D6%CF%ED%BF%D5%BC%E4/blog/item/c47217d08fe66b23960a16e
4.html\o模糊神经网络算法之__TLAB实现 最近读者 网友评论窗体顶端窗体底端窗体顶端发表评论 内 容插入表情▼ 闪光字 取消回复http://hi.baidu.com/%B4%F0%B0%B8%B7%D6%CF%ED%BF%D5%BC%E4/blog/item/3e0c8bab023aa7a6ca130c
08.html\l#窗体底端 ©2011Baidu学习了。