




已阅读5页,还剩7页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
神经网络实学习 例子1通过神经网络滤波和信号处理,传统的sigmoid函数具有全局逼近能力,而径向基rbf函数则具有更好的局部逼近能力,采用完全正交的rbf径向基函数作为激励函数,具有更大的优越性,这就是小波神经网络,对细节逼近能力更强。BP网络的特点网络实质上实现了一个从输入到输出的映射功能,而数学理论已证明它具有实现任何复杂非线性映射的功能。这使得它特别适合于求解内部机制复杂的问题。我们无需建立模型,或了解其内部过程,只需输入,获得输出。只要BPNN结构优秀,一般20个输入函数以下的问题都能在50000次的学习以内收敛到最低误差附近。而且理论上,一个三层的神经网络,能够以任意精度逼近给定的函数,这是非常诱人的期望;网络能通过学习带正确答案的实例集自动提取合理的求解规则,即具有自学习能力;网络具有一定的推广、概括能力。bp主要应用回归预测(可以进行拟合,数据处理分析,事物预测,控制等)、分类识别(进行类型划分,模式识别等),在后面的学习中,都将给出实例程序。但无论那种网络,什么方法,解决问题的精确度都无法打到100%的,但并不影响其使用,因为现实中很多复杂的问题,精确的解释是毫无意义的,有意义的解析必定会损失精度。BP注意问题1、BP算法的学习速度很慢,其原因主要有:a由于BP算法本质上为梯度下降法,而它所要优化的目标函数又非常复杂,因此,必然会出现锯齿形现象,这使得BP算法低效;结论4:由上表可以看出,后者的初始权值比较合适些,因此训练的时间变短,误差收敛速度明显快些。因此初始权值的选取对于一个网络的训练是很重要的。1.4,用最基本的BP算法来训练BP神经网络时,学习率、均方误差、权值、阈值的设置都对网络的训练均有影响。综合选取合理的值,将有利于网络的训练。在最基本的BP算法中,学习率在整个训练过程是保持不变的,学习率过大,算法可能振荡而不稳定;学习率过小,则收敛速度慢,训练时间长。而要在训练之前选择最佳的学习率是不现实的。因此学习率可变的BP算法(variable learning rate backpropagation,VLBP)应运而生。下一结介绍用VLBP来训练该网络的情况。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:第二节内容:主要是阐述BP中几个容易混绕的概念和问题,包括什么是网络的泛化能力?过拟合是什么,怎么处理?学习速率有什么作用?神经网络的权值和阈值分别是个什么概念?用BP逼近非线性函数,如何提高训练精度?本节主要学习BP中几个容易混绕的概念和问题:什么是网络的泛化能力?过拟合是什么,怎么处理?学习速率有什么作用?神经网络的权值和阈值分别是个什么概念?用BP逼近非线性函数,如何提高训练精度?什么是网络的泛化能力?一个神经网路是否优良,与传统最小二乘之类的拟合评价不同(主要依据残差,拟合优度等),不是体现在其对已有的数据拟合能力上,而是对后来的预测能力,既泛化能力。网络的预测能力(也称泛化能力、推广能力)与训练能力(也称逼近能力、学习能力)的矛盾。一般情况下,训练能力差时,预测能力也差,并且一定程度上,随训练能力地提高,预测能力也提高。但这种趋势有一个极限,当达到此极限时,随训练能力的提高,预测能力反而下降,即出现所谓过拟合现象。此时,网络学习了过多的样本细节,而不能反映样本内含的规律。过拟合是什么,怎么处理?神经网络计算不能一味地追求训练误差最小,这样很容易出现过拟合现象,只要能够实时检测误差率的变化就可以确定最佳的训练次数,比如15000次左右的学习次数,如果你不观察,设成500000次学习,不仅需要很长时间来跑,而且最后结果肯定令人大失所望。避免过拟合的一种方法是:在数据输入中,给训练的数据分类,分为正常训练用、变量数据、测试数据,在后面节将讲到如何进行这种分类。其中变量数据,在网络训练中,起到的作用就是防止过拟合状态。学习速率有什么作用?学习速率这个参数可以控制能量函数的步幅,并且如果设为自动调整的话,可以在误差率经过快速下降后,将学习速率变慢,从而增加BPNN的稳定性。此时训练方法采用采用贝叶斯正则化算法提高BP网络的推广能力。二主要函数1 prepca函数对归一化后的样本数据进行主元分析,从而消除样本数据中的冗余成份,起到数据降维的目的。ptrans,transMat=prepca(pn,0.001);1、数据归一化mapminmax(x,minx,maxx)minx为要取得的最小值,maxx为最大值一般归一化到0.1-0.9比较和2或者使用mapstd 3反归一化y1=mapminmax(reverse,y,ps)2、数据分类,主要包括打乱数据顺序,抽取正常训练用数据、变量数据、测试数据4dividevec()函数输入训练数据的乱序排法,以及分类trainV,valV,testV=dividevec(p,t,valPercent,testPercent)p=rands(3,1000);t=p(1,:).*p(2,:);p(2,:).*p(3,:);trainV,valV,testV=dividevec(p,t,0.20,0.20);net=newff(minmax(p),10 size(t,1);正常数据,是用来正常训练用变量数据,主要目的是防止训练中出现过拟合状态测试数据,是用来看训练效果的net=train(net,trainV.P,trainV.T,valV,testV);sim(net,validateSamples.P,validateSamples.T)5 traingdx函数net,TR=traingdx(net,TR,trainV,valV,testV)traingdx is anetwork training function that updates weight and bias values according to gradient descent momentum and an adaptive learning =traingdx(info)net:Neural network TR:Initial training record created by train trainV:Training data created by train valV:Validation data created by train testV:Test data created by train and returns net:Trained network TR:Training record of various values over each epoch 4常用bp训练函数Traingdm%动量梯度下降算法Traingda变学习率梯度下降算法Traingdx%变学习率动量梯度下降算法TrainrpRPROP(弹性BP)算法,内存需求最小大型网络训练方法%(共轭梯度算法)traincgf;%Fletcher-Reeves修正算法traincgp;%Polak-Ribiere修正算法,内存需求比Fletcher-Reeves修正算法略大traincgb;%Powell-Beal复位算法,内存需求比Polak-Ribiere修正算法略大%(大型网络的首选算法)trainscg;%Scaled Conjugate Gradient算法,内存需求与Fletcher-Reeves修正算法相同,计算量比上面三种算法都小很多trainbfg;%Quasi-Newton Algorithms-BFGS Algorithm,计算量和内存需求均比共轭梯度算法大,但收敛比较快trainoss;%One Step Secant Algorithm,计算量和内存需求均比BFGS算法小,比共轭梯度算法略大%(中型网络的首选算法)trainlm;%Levenberg-Marquardt算法,内存需求最大,收敛速度最快trainbr;%贝叶斯正则化算法trainV,valV,testV,trainInd,valInd,testInd=divideblock(allV,trainRatio,valRatio,testRatio)训练数据,变量数据,测试数据,训练数据矩阵的标号,变量数据标号,测试数据标号=divideblock(所有数据,训练数据百分比,变量数据百分比,测试数据百分比)其实dividevec和后面四个分类函数的区别在于,dividevec一般直接在Matlab代码中调用。而后面四个函数是通过设置网络的divideFcn函数来实现,比如,net.divideFcn=divideblock,但不是说不可以在代码中像dividevec直接调用阀值和权值训练好的权值、阈值的输出方法是:输入到隐层权值:代码:w1=net.iw1,1隐层阈值:代码:theta1=net.b1隐层到输出层权值代码:w2=net.lw2,1;输出层阈值:代码:theta2=net.b2net.IW是输入权值,net.LW是层权值,net.b是阈值。直接用命令对这些值赋值就可以了。还有不懂的可以参看帮助训练好的BP神经网络保存:因为每次初始化网络时都是随机的,而且训练终止时的误差也不完全相同,结果训练后的权植和阀也不完全相同(大致是一样的),所以每次训练后的结果也略有不同。找到比较好的结果后,用命令save filen_ame net_name保存网络,可使预测的结果不会变化,在需要的调用时用命令load filename载入。关于如何找到比较好的结果,进行保存,可以设置误差,在循环中保存,具体使用可以参看bp交通预测优化后的例子神经网络例子例子1本文实习带训练,验证,测试数据的BP函数识别。x=1:1:100;y=2*sin(x*pi/10)+0.5*randn(1,100);plot(x,y);输入输出xg,ps=mapminmax(x,.1,.9);yg,pt=mapminmax(y,.1,.9);归一化到0.1-0.9trainV,valV,testV=dividevec(xg,yg,0.2,0.2);随机抽取训练,验证,测试数据net=newff(minmax(xg),15,1,tansig,purelin,trainscg);建立BP函数net=train(net,trainV.P,trainV.T,valV,testV);训练xtrain=sim(net,trainV.P,trainV.T);仿真xvalidation=sim(net,valV.P,valV.T);仿真xtest=sim(net,testV.P,testV.T);仿真ytrainr=mapminmax(reverse,xtrain,pt);对仿真反归一化yvalidationr=mapminmax(reverse,xvalidation,pt);对仿真反归一化ytestr=mapminmax(reverse,xtest,pt);对仿真反归一化trainr=mapminmax(reverse,trainV.T,pt);反归一化validationr=mapminmax(reverse,valV.T,pt);反归一化testr=mapminmax(reverse,testV.T,pt);反归一化msetrain=mse(trainr-ytrainr);求误差msevalidation=mse(yvalidationr-validationr);求误差msetest=mse(testr-ytestr);求误差例2采用贝叶斯正则化算法提高BP网络的推广能力。p在本例中,我们采用两种训练方法,即L-M优化算法(trainlm)和贝叶斯正则化算法(trainbr),用以训练BP网络,使其能够拟合某一附加有白噪声的正弦样本数据。其中,样本数据可以采用如下MATLAB语句生成:输入矢量:P=-1:0.05:1;目标矢量:randn(seed,78341223);T=sin(2*pi*P)+0.1*randn(size(P);解:本例的MATLAB程序如下:close all clear echo on clc%NEWFF-生成一个新的前向神经网络%TRAIN-对BP神经网络进行训练%SIM-对BP神经网络进行仿真pause%敲任意键开始clc%定义训练样本矢量%P为输入矢量P=-1:0.05:1;%T为目标矢量randn(seed,78341223);T=sin(2*pi*P)+0.1*randn(size(P);%绘制样本数据点plot(P,T,+);echo off hold on;plot(P,sin(2*pi*P),:);%绘制不含噪声的正弦曲线echo on clc pause clc%创建一个新的前向神经网络net=newff(minmax(P),20,1,tansig,purelin);pause clc echo off clc disp(1.L-M优化算法TRAINLM);disp(2.贝叶斯正则化算法TRAINBR);choice=input(请选择训练算法(1,2):);figure(gcf);if(choice=1)echo on clc%采用L-M优化算法TRAINLM net.trainFcn=trainlm;pause clc%设置训练参数net.trainParam.epochs=500;net.trainParam.goal=1e-6;net=init(net);%重新初始化pause clc elseif(choice=2)echo on clc%采用贝叶斯正则化算法TRAINBR net.trainFcn=trainbr;pause clc%设置训练参数net.trainParam.epochs=500;randn(seed,192736547);net=init(net);%重新初始化pause clc end%调用相应算法训练BP网络net,tr=train(net,P,T);pause clc%对BP网络进行仿真A=sim(net,P);%计算仿真误差E=T-A;MSE=mse(E)pause clc%绘制匹配结果曲线close all;plot(P,A,P,T,+,P,sin(2*pi*P),:);pause;clc echo off RBF网络与BP网络比较:?RBF网络的输出是隐单元输出的线性加权和,学习速度加快?BP网络使用sigmoid()函数作为激活函数,这样使得神经元有很大的输入可见区域?径向基神经网络使用径向基函数(一般使用高斯函数)作为激活函数,神经元输入空间区域很小,因此需要更多的径向基神经元二RBF径向基网络net,tr=newrb(P,T,goal,spread,MN,DF)Spread为分散系数,默认为1,spread分布密度是自己调节的.我建议你多试几次,Spread越大函数就越平滑但是对于目标的接近就越不稳定。MN为最大神经元数目Here we design aradial basis network given inputs Pand targets T.P=1 23;T=2.0 4.1 5.9;net=newrb(P,T);P=1.5;Y=sim(net,P)众所周知,BP网络用于函数逼近时,权值的调节采用的是负梯度下降法。这个调节权值的方法有局限性,即收敛慢和局部极小等。径向基函数网络(RBF)在逼近能力、分类能力和学习速度等方面均优于BP网络。Matlab中提供了四个径向基函数相关的函数,它们都是创建两层的神经网络,第一层都是径向基层,第二层是线性层或者竞争层。主要的区别是它们权值、阀值就算函数不同或者是否有阀值。注意:径向基函数网络不需要训练,在创建的时候就自动训练好了。1.net=newrbe(P,T,spread)newrbe()函数可以快速设计一个径向基函数网络,且是的设计误差为0。第一层(径向基层)神经元数目等于输入向量的个数,加权输入函数为dist,网络输入函数为netprod;第二层(线性层)神经元数模有输出向量T确定,加权输入函数为dotprod,网络输入函数为netsum。两层都有阀值。第一层的权值初值为p,阀值初值为0.8326/spread,目的是使加权输入为spread时径向基层输出为0.5,阀值的设置决定了每一个径向基神经元对输入向量产生响应的区域。2.net,tr=newrb(P,T,goal,spread,MN,DF)该函数和newrbe一样,只是可以自动增加网络的隐层神经元数模直到均方差满足精度或者神经元数模达到最大为止。例子1 P=-1:0.1:1;T=sin(P);spread=1;mse=0.02;net=newrb(P,T,mse,spread);t=sim(net,P);plot(P,T,r*,P,t)3.net=newgrnn(P,T,spread)泛回归网络(generalized regression neural network)广义回归网络主要用于函数逼近。它的结构完全与newbre的相同,但是有以下几点区别(没有说明的表示相同):(1)第二网络的权值初值为T(2)第二层没有阀值(3)第二层的权值输入函数为normpod,网络输入函数为netsum P=0:1:20;T=exp(P).*sin(P);net=newgrnn(P,T,0.7);p=0:0.1:20;t=sim(net,p);plot(P,T,*r,p,t)4.net=newpnn(P,T,spread)概率神经网络(probabilistic neural network)(主要用于分类问题)该网络与前面三个最大的区别在于,第二层不再是线性层而是竞争层,并且竞争层没有阀值,其它同newbre,故PNN网络主要用于解决分类问题。PNN是按下面的方式进行分类的:为网络提供一输入向量后,首先,径向基层计算该输入向量同样本输入向量之间的距离|dist|,该层的输出为一个距离向量;竞争层接受距离向量为输入,计算每个模式出现的概率,通过竞争传递函数为概率最大的元素对应输出1,否则为0。注意:由于第二层是竞争层,故输入/输出向量必须使用ind2vec/vec2ind函数进行转换,也就是将索引转换为向量或者向量转换为索引。P=1 2;2 2;1 1P=1 21 22 1Tc=1 23;应该为分类索引T=ind2vec(Tc)T=(1,1)1(2,2)1(3,3)1 spread=1;net=newpnn(P,T,spread);t=sim(net,P)t=(1,1)1(2,2)1(3,3)1 tc=vec2ind(t)tc=1 23%从这里可以看出gnn对P准确分类了例子4读取wav文件name=input(file name,s);fname=F:基于概率神经网络的数字语音识别matlab程序newpnnwavnameint2str(i-1).wav;例子1%通用径向基函数网络-%其在逼近能力,分类能力,学习速度方面均优于BP神经网络%在径向基网络中,径向基层的散步常数是spread的选取是关键%spread越大,需要的神经元越少,但精度会相应下降,spread的缺省值为1%可以通过net=newrbe(P,T,spread)生成网络,且误差为0%可以通过net=newrb(P,T,goal,spread)生成网络,神经元由1开始增加,直到达到训练精度或神经元数目最多为止例子1%GRNN网络,迅速生成广义回归神经网络(GRNN)P=4 56;T=1.5 3.6 6.7;net=newgrnn(P,T);%仿真验证p=4.5;v=sim(net,p)例子2%PNN网络,概率神经网络P=0 0;1 1;0 3;1 4;3 1;4 1;4 3;Tc=1 12 23 33;%将期望输出通过ind2vec()转换,并设计、验证网络T=ind2vec(Tc);net=newpnn(P,T);Y=sim(net,P);Yc=vec2ind(Y)%尝试用其他的输入向量验证网络P2=1 4;0 1;5 2;Y=sim(net,P2);Yc=vec2ind(Y)例子4%绘制隐层神经元径向基传递函数的曲线p=-3:.1:3;a=radbas(p);plot(p,a)title(径向基传递函数)xlabel(输入向量p)%隐层神经元的权值、阈值与径向基函数的位置和宽度有关,只要隐层神经元数目、权值、阈值正确,可逼近任意函数%例如a2=radbas(p-1.5);a3=radbas(p+2);a4=a+a2*1.5+a3*0.5;plot(p,a,b,p,a2,g,p,a3,r,p,a4,m-)title(径向基传递函数权值之和)xlabel(输入p);ylabel(输出a);%应用newrb()函数构建径向基网络的时候,可以预先设定均方差精度eg以及散布常数sc eg=0.02;sc=1;%其值的选取与最终网络的效果有很大关系,过小造成过适性,过大造成重叠性net=newrb(P,T,eg,sc);%网络测试plot(P,T,*)xlabel(输入);X=-1:.01:1;Y=sim(net,X);hold on plot(X,Y);hold off legend(目标,输出)%应用grnn进行函数逼近P=1 23 45 67 8;T=0 12 32 12 1;plot(P,T,.,markersize,30)axis(0 9-1 4)title(待逼近函数)xlabel(P)ylabel(T)%网络设计%对于离散数据点,散布常数spread选取比输入向量之间的距离稍小一些spread=0.7;net=newgrnn(P,T,spread);%网络测试A=sim(net,P);hold on outputline=plot(P,A,o,markersize,10,color,1 00);title(检测网络)xlabel(P)ylabel(T和A)%应用pnn进行变量的分类P=1 2;2 2;1 1;%输入向量Tc=1 23;%P对应的三个期望输出%绘制出输入向量及其相对应的类别plot(P(1,:),P(2,:),.,markersize,30)for i=1:3 text(P(1,i)+0.1,P(2,i),sprintf(class%g,Tc(i)end axis(0 30 3);title(三向量及其类别)xlabel(P(1,:)ylabel(P(2,:)%网络设计T=ind2vec(Tc);spread=1;net=newgrnn(P,T,speard);%网络测试A=sim(net,P);Ac=vec2ind(A);%绘制输入向量及其相应的网络输出plot(P(1,:),P(2,:),.,markersize,30)for i=1:3 text(P(1,i)+0.1,P(2,i),sprintf(class%g,Ac(i)end axis(0 30 3);title(网络测试结果)xlabel(P(1,:)ylabel(P(2,:)三Elman神经网络Elman网络一般不推荐大步训练方法比如trainlm和trainrp Elman神经网络是一种带有反馈的两层BP网络结构,其反馈连接是从隐含层的输出到其输入端。这种反馈方式使得Elman网络能够探测和识别时变模式。其隐含层又称为反馈层,神经元的传递函数为tansi
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年个人网约车租赁合同
- 2025车辆买卖意向合同
- 2025年上海市商品房预售合同ae
- 公园急救知识培训课件
- 搬运工安全知识培训内容课件
- 公司职业风险知识培训课件
- 揭阳安全知识培训课件
- 揠苗助长课件
- 感染科岗位招聘面试题解析:临床医学知识与应用能力
- 插班生试验课件
- 环境材料概论 完整全套课件第1-9章 绪论、吸附材料 -环境材料的绿色设计
- 金安桥水电站枢纽布置及主要技术问题
- 郑州城市职业学院辅导员考试题库
- 2022公务员录用体检操作手册(试行)
- 新课标的变化与思想政治课的教学课件
- 动物检疫检验考试题库(含答案)
- 非法社会组织排查表
- 关于设置老年病医院(医疗机构)的可行性报告
- 2023年隆回县体育教师招聘笔试模拟试题及答案
- GB/T 30146-2013公共安全业务连续性管理体系要求
- GCP培训教学讲解课件
评论
0/150
提交评论