神经网络实学习 例子.docx
- 文档编号:18559299
- 上传时间:2023-08-19
- 格式:DOCX
- 页数:12
- 大小:25.22KB
神经网络实学习 例子.docx
《神经网络实学习 例子.docx》由会员分享,可在线阅读,更多相关《神经网络实学习 例子.docx(12页珍藏版)》请在冰点文库上搜索。
神经网络实学习例子
神经网络实学习例子
1通过神经网络滤波和信号处理,传统的sigmoid函数具有全局逼近能力,而径向基rbf函数则具有更好的局部逼近能力,采用完全正交的rbf径向基函数作为激励函数,具有更大的优越性,这就是小波神经网络,对细节逼近能力更强。
BP网络的特点①网络实质上实现了一个从输入到输出的映射功能,而数学理论已证明它具有实现任何复杂非线性映射的功能。
这使得它特别适合于求解内部机制复杂的问题。
我们无需建立模型,或了解其内部过程,只需输入,获得输出。
只要BPNN结构优秀,一般20个输入函数以下的问题都能在50000次的学习以内收敛到最低误差附近。
而且理论上,一个三层的神经网络,能够以任意精度逼近给定的函数,这是非常诱人的期望;②网络能通过学习带正确答案的实例集自动提取"合理的"求解规则,即具有自学习能力;③网络具有一定的推广、概括能力。
bp主要应用回归预测(可以进行拟合,数据处理分析,事物预测,控制等)、分类识别(进行类型划分,模式识别等),在后面的学习中,都将给出实例程序。
但无论那种网络,什么方法,解决问题的精确度都无法打到100%的,但并不影响其使用,因为现实中很多复杂的问题,精确的解释是毫无意义的,有意义的解析必定会损失精度。
BP注意问题1、BP算法的学习速度很慢,其原因主要有:
a由于BP算法本质上为梯度下降法,而它所要优化的目标函数又非常复杂,因此,必然会出现"锯齿形现象",这使得BP算法低效;
结论4:
由上表可以看出,后者的初始权值比较合适些,因此训练的时间变短,
误差收敛速度明显快些。
因此初始权值的选取对于一个网络的训练是很重要的。
1.4,用最基本的BP算法来训练BP神经网络时,学习率、均方
误差、权值、阈值的设置都对网络的训练均有影响。
综合选取合理的值,将有
利于网络的训练。
在最基本的BP算法中,学习率在整个训练过程是保持不变的,
学习率过大,算法可能振荡而不稳定;学习率过小,则收敛速度慢,训练时间
长。
而要在训练之前选择最佳的学习率是不现实的。
因此学习率可变的BP算法
(variablelearningratebackpropagation,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网络的推广能力。
二主要函数
1prepca函数对归一化后的样本数据进行主元分析,从而消除样本数据中的冗余成份,起到数据降维的目的。
[ptrans,transMat]=prepca(pn,0.001);
1、数据归一化mapminmax(x,minx,maxx)minx为要取得的最小值,maxx为最大值一般归一化到0.1-0.9比较和
2或者使用mapstd3反归一化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),[10size(t,1)]);
正常数据,是用来正常训练用变量数据,主要目的是防止训练中出现过拟合状态测试数据,是用来看训练效果的
net=train(net,trainV.P,trainV.T,,,valV,testV);
sim(net,validateSamples.P,,,validateSamples.T)
5traingdx函数
[net,TR]=traingdx(net,TR,trainV,valV,testV)
traingdxisanetworktrainingfunctionthatupdatesweightandbiasvaluesaccordingtogradientdescentmomentumandanadaptivelearningrate.
info=traingdx('info')
net:
NeuralnetworkTR:
InitialtrainingrecordcreatedbytraintrainV:
TrainingdatacreatedbytrainvalV:
ValidationdatacreatedbytraintestV:
Testdatacreatedbytrainandreturnsnet:
TrainednetworkTR:
Trainingrecordofvariousvaluesovereachepoch4常用bp训练函数
Traingdm%动量梯度下降算法
Traingda变学习率梯度下降算法
Traingdx%变学习率动量梯度下降算法
TrainrpRPROP(弹性BP)算法,内存需求最小大型网络训练方法
%(共轭梯度算法)
traincgf';%Fletcher-Reeves修正算法traincgp';%Polak-Ribiere修正算法,内存需求比Fletcher-Reeves修正算法略大traincgb';%Powell-Beal复位算法,内存需求比Polak-Ribiere修正算法略大%(大型网络的首选算法)
trainscg';%ScaledConjugateGradient算法,内存需求与Fletcher-Reeves修正算法相同,计算量比上面三种算法都小很多trainbfg';%Quasi-NewtonAlgorithms-BFGSAlgorithm,计算量和内存需求均比共轭梯度算法大,但收敛比较快trainoss';%OneStepSecantAlgorithm,计算量和内存需求均比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.iw{1,1}
隐层阈值:
代码:
theta1=net.b{1}
隐层到输出层权值代码:
w2=net.lw{2,1};
输出层阈值:
代码:
theta2=net.b{2}
net.IW是输入权值,net.LW是层权值,net.b是阈值。
直接用命令对这些值赋值就可以了。
还有不懂的可以参看帮助
训练好的BP神经网络保存:
因为每次初始化网络时都是随机的,而且训练终止时的误差也不完全相同,结果训练后的权植和阀也不完全相同(大致是一样的),所以每次训练后的结果也略有不同。
找到比较好的结果后,用命令savefilen_amenet_name保存网络,可使预测的结果不会变化,在需要的调用时用命令loadfilename载入。
关于如何找到比较好的结果,进行保存,可以设置误差,在循环中保存,具体使用可以参看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.9
[trainV,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程序如下:
closeallclearechoonclc%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,'+');echooffholdon;plot(P,sin(2*pi*P),':
');%绘制不含噪声的正弦曲线echoonclcpauseclc%创建一个新的前向神经网络net=newff(minmax(P),[20,1],{'tansig','purelin'});pauseclcechooffclcdisp('1.L-M优化算法TRAINLM');disp('2.贝叶斯正则化算法TRAINBR');choice=input('请选择训练算法(1,2):
');figure(gcf);if(choice==1)echoonclc%采用L-M优化算法TRAINLMnet.trainFcn='trainlm';pauseclc%设置训练参数net.trainParam.epochs=500;net.trainParam.goal=1e-6;net=init(net);%重新初始化pauseclcelseif(choice==2)echoonclc%采用贝叶斯正则化算法TRAINBRnet.trainFcn='trainbr';pauseclc%设置训练参数net.trainParam.epochs=500;randn('seed',192736547);net=init(net);%重新初始化pauseclcend%调用相应算法训练BP网络[net,tr]=train(net,P,T);pauseclc%对BP网络进行仿真A=sim(net,P);%计算仿真误差E=T-A;MSE=mse(E)pauseclc%绘制匹配结果曲线closeall;plot(P,A,P,T,'+',P,sin(2*pi*P),':
');pause;clcechooffRBF网络与BP网络比较:
?
RBF网络的输出是隐单元输出的线性加权和,学习速度加快
?
BP网络使用sigmoid()函数作为激活函数,这样使得神经元有很大的输入可见区域
?
径向基神经网络使用径向基函数(一般使用高斯函数)作为激活函数,神经元输入空间区域很小,因此需要更多的径向基神经元
二RBF径向基网络
[net,tr]=newrb(P,T,goal,spread,MN,DF)
Spread为分散系数,默认为1,spread分布密度是自己调节的.我建议你多试几次,Spread越大函数就越平滑但是对于目标的接近就越不稳定。
MN为最大神经元数目
HerewedesignaradialbasisnetworkgiveninputsP
andtargetsT.
P=[123];
T=[2.04.15.9];
net=newrb(P,T);
P=1.5;
Y=sim(net,P)
众所周知,BP网络用于函数逼近时,权值的调节采用的是负梯度下降法。
这个调节权值的方法有局限性,即收敛慢和局部极小等。
径向基函数网络(RBF)在逼近能力、分类能力和学习速度等方面均优于BP网络。
Matlab中提供了四个径向基函数相关的函数,它们都是创建两层的神经网络,第一层都是径向基层,第二层是线性层或者竞争层。
主要的区别是它们权值、阀值就算函数不同或者是否有阀值。
注意:
径向基函数网络不需要训练,在创建的时候就自动训练好了。
=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一样,只是可以自动增加网络的隐层神经元数模直到均方差满足精度或者神经元数模达到最大为止。
例子1P=-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)
=newgrnn(P,T,spread)泛回归网络(generalizedregressionneuralnetwork)广义回归网络主要用于函数逼近。
它的结构完全与newbre的相同,但是有以下几点区别(没有说明的表示相同):
(1)第二网络的权值初值为T
(2)第二层没有阀值(3)第二层的权值输入函数为normpod,网络输入函数为netsumP=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)=newpnn(P,T,spread)概率神经网络(probabilisticneuralnetwork)(主要用于分类问题)该网络与前面三个最大的区别在于,第二层不再是线性层而是竞争层,并且竞争层没有阀值,其它同newbre,故PNN网络主要用于解决分类问题。
PNN是按下面的方式进行分类的:
为网络提供一输入向量后,首先,径向基层计算该输入向量同样本输入向量之间的距离||dist||,该层的输出为一个距离向量;竞争层接受距离向量为输入,计算每个模式出现的概率,通过竞争传递函数为概率最大的元素对应输出1,否则为0。
注意:
由于第二层是竞争层,故输入/输出向量必须使用ind2vec/vec2ind函数进行转换,也就是将索引转换为向量或者向量转换为索引。
P=[12;22;11]'P=121221Tc=[123];应该为分类索引T=ind2vec(Tc)T=(1,1)1(2,2)1(3,3)1spread=1;net=newpnn(P,T,spread);t=sim(net,P)t=(1,1)1(2,2)1(3,3)1tc=vec2ind(t)tc=123%从这里可以看出gnn对P准确分类了例子4读取wav文件
name=input('filename','s');fname=['F:
\基于概率神经网络的数字语音识别matlab程序\newpnn\wav\name'int2str(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=[456];T=[1.53.66.7];net=newgrnn(P,T);%仿真验证p=4.5;v=sim(net,p)例子2%PNN网络,概率神经网络P=[00;11;03;14;31;41;43]';Tc=[1122333];%将期望输出通过ind2vec()转换,并设计、验证网络T=ind2vec(Tc);net=newpnn(P,T);Y=sim(net,P);Yc=vec2ind(Y)%尝试用其他的输入向量验证网络P2=[14;01;52]';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以及散布常数sceg=0.02;sc=1;%其值的选取与最终网络的效果有很大关系,过小造成过适性,过大造成重叠性net=newrb(P,T,eg,sc);%网络测试plot(P,T,'*')xlabel('输入');X=-1:
.01:
1;Y=sim(net,X);holdonplot(X,Y);holdofflegend('目标','输出')%应用grnn进行函数逼近P=[12345678];T=[01232121];plot(P,T,'.','markersize',30)axis([09-14])title('待逼近函数')xlabel('P')ylabel('T')%网络设计%对于离散数据点,散布常数spread选取比输入向量之间的距离稍小一些spread=0.7;net=newgrnn(P,T,spread);%网络测试A=sim(net,P);holdonoutputline=plot(P,A,'o','markersize',10,'color',
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 神经网络实学习 例子 神经网络 实学