
神经网络分类.doc
6页实验一利用神经网络进行分类转载于陕西理工学院数学系中心实验室周涛副教授的工作,在此表示感谢)一个经过训练的2输入神经元对5个输入向量进行分类(2类)结合一个例子给出步骤实验内容(说明:这里的许多参数都可以更改,希望大家能对这个程序的参数进行修改;同时也欢迎大家提问)步骤一:两个长度为5的向量构成输入样本矩阵P,行向量T为指导向量利用PLOTPV画出这个向量的图像例如:P=[-0.5-0.5+0.3-0.1-4;-0.5+0.5-0.5+1.05];T=[11001];plotpv(P,T);//plotpv函数利用感知器的输入向量和监督向量来画输入向量的图像注意:在上面的式子中,4输入向量比5输入向量有更小的数量级,这个感知器必须把P中的5个输入向量分成两类(依赖于T)步骤二建立神经网络MATLAB提供函数newp来创建一个指定的感知器第一个参数指定了期望的两个输入向量的取值范围,第二个参数指定了只有一个神经元net=newp([-401;-150],1);注意:这个神经元的激励函数是hardlim函数,也就是阶越函数取0,1两个值Hardlim三函数,也就是阶越函数取-1,1两个值步骤三添加神经元的初始化值到分类图初始化的权值被设为0,因此任何输入都会给出同样的输出,并且分类线不会出现在这个图中,不用害怕,我们会继续训练这个神经网。
holdonlinehandle=plotpc(net.IW{1},net.b{1});//plotpc函数用来画神经网络的分类线步骤四训练感知器Matlab提供了adapt函数来训练感知器,adapt函数返回一个新的能更好的执行分类、网络的输出、和误差的神经网络,这个划线函数允许网络从3个角度去调整,画分类线一直到误差为0为止E=1;//E为误差net.adaptParam.passes=3;while(sse(E))//sse函数是用来判定误差E的函数[net,Y,E]=adapt(net,P,T);〃利用输入样本调节神经网netlinehandle=plotpc(net.IW{1},net.b{1},linehandle);〃画出调整以后的分类线drawnow;//延迟一段时间end注意:这将会花费感知器的许多时间来训练这对这样一个简单问题来说时间是非常长的追究其原因在于outliervector,尽管需要很长的训练时间,这个感知器仍然适当的学习并且被用于划分别的输入步骤五模拟SIM函数能被用来划分任何别的输入向量,例如划分一个输入向量[0.7;1.2].这个新点的图像为红色,他将用来显示这个感知器如何把这个新点从最初的训练集取分开来。
p=[0.7;1.2];a=sim(net,p);〃利用模拟函数sim计算出新输入p的神经网络的输出plotpv(p,a);circle=findobj(gca,'type','line');set(circle,'Color','red');打开Hold,以便于以前的图像不被删除增加训练装置和分类线在图中holdon;plotpv(P,T);plotpc(net.IW{1},net.b{1});holdoff;axis([-22-22]);最后放大感兴趣的区域这个感知器正确的区分了我们的新点(用红色表示)作为”zero,啖(用圆圈表示),而不是”one,啖(用+号表示),尽管需要比较长的训练时间,这个感知器仍然适当的进行了学习想知道在outliervectors的情况下如何减少训练时间,需要做实验一的优化实验"NormalizedPerceptronRule"练习1熟悉并理解plotpv,plotpc函数Thecodebelowdefinesandplotstheinputsandtargetsforaperceptron:p=[0011;0101];t=[0001];plotpv(p,t)ThefollowingcodecreatesaperceptronwithinputsrangingoverthevaluesinP,assignsvaluestoitsweightsandbiases,=newp(minmax(p),1);net.iw{1,1}=[-1.2-0.5];net.b{1}=1;plotpc(net.iw{1,1},net.b{1})newp函数解释NEWPCreateaperceptron.Syntaxnet=newpnet=newp(pr,s,tf,lf)DescriptionPerceptronsareusedtosolvesimple(i.e.linearlyseparable)classificationproblems.NET=NEWPcreatesanewnetworkwithadialogbox.NET=NEWP(PR,S,TF,LF)takestheseinputs,PR-Rx2matrixofminandmaxvaluesforRinputelements.S-Numberofneurons.TF-Transferfunction,default='hardlim'.LF-Learningfunction,default='learnp'.Returnsanewperceptron.ThetransferfunctionTFcanbeHARDLIMorHARDLIMS.ThelearningfunctionLFcanbeLEARNPorLEARNPN.ExamplesThiscodecreatesaperceptronlayerwithone2-elementinput(ranges[01]and[-22])andoneneuron.(SupplyingonlytwoargumentstoNEWPresultsinthedefaultperceptronlearningfunctionLEARNPbeingused.)net=newp([01;-22],1);Nowwedefineaproblem,anORgate,withasetoffour2-elementinputvectorsPandthecorrespondingfour1-elementtargetsT.P=[0011;0101];T=[0111];Herewesimulatethenetwork'soutput,trainforamaximumof20epochs,andthensimulateitagain.Y=sim(net,P)net.trainParam.epochs=20;net=train(net,P,T);Y=sim(net,P)NotesPerceptronscanclassifylinearlyseparableclassesinafiniteamountoftime.Ifinputvectorshavealargevarianceintheirlengths,theLEARNPNcanbefasterthanLEARNP.PropertiesPerceptronsconsistofasinglelayerwiththeDOTPRODweightfunction,theNETSUMnetinputfunction,andthespecifiedtransferfunction.Thelayerhasaweightfromtheinputandabias.WeightsandbiasesareinitializedwithINITZERO.AdaptionandtrainingaredonewithTRAINSandTRAINC,whichbothupdateweightandbiasvalueswiththespecifiedlearningfunction.PerformanceismeasuredwithMAE.实验一的优化NormalizedPerceptronRule一个经过训练的2输入神经元对5个输入向量进行分类(2类)。
结合一个例子给出步骤实验内容:步骤一:两个长度为5的向量构成输入样本矩阵P,行向量T为指导向量利用PLOTPV画出这个向量的图像例如:P=[-0.5-0.5+0.3-0.1-40;-0.5+0.5-0.5+1.050];T=[11001];plotpv(P,T);注意:在上面的式子中,4输入向量比5输入向量有更小的数量级,这个感知器必须把P中的5个输入向量分成两类(依赖于T).步骤二建立神经网络MATLAB提供函数newp来创建一个指定的感知器第一个参数指定了期望的两个输入向量的取值范围,第二个参数指定了只有一个神经元第三个参数指定了激励函数,Learnpn对输入向量大小的变化比learnp(默认的)不敏感net=newp([-401;-150],1,'hardlim','learnpn');第三步添加神经元的初始化值到分类图初始化的权值被设为0,因此任何输入都会给出同样的输出,并且分类线不会出现在这个图中,不用害怕,我们会继续训练这个神经网holdonlinehandle=plotpc(net.IW{1},net.b{1});第四步训练感知器Matlab提供了adapt函数来训练感知器,adapt函数返回一个新的能更好的执行分类、网络的输出、和误差的神经网络,这个划线函数允许网络从3个角度去调整,画分类线一直到误差为0为止。
注意:这将会花费感知器的许多时间来训练这对这样一个简单问题来说时间是非常长的追究其原因在于outliervector,尽管需要很长的训练时间,这个感知器仍然适当的学习并且被用于划分别的输入E=1;net.adaptParam.passes=3;while(sse(E))[net,Y,E]=adapt(net,P,T);linehandle=plotpc(net.IW{1},net.b{1},linehandle);drawnow;end注意:用learnp进行训练需要3个时间单位,而用learnpn解决同样的问题需要32个时间单位,因此,当输入向量的大小发生很大变化时,learnpn比learnp要用的普遍第步模拟SIM函数能被用来划分任何别的输入向量,例如划分一个输入向量[0.7;1.2].这个新点的图像为红色,他将用来显示这个感知器如何把这个新点从最初的训练集取分开来p=[0.7;1.2];a=sim(net,p);plotpv(p,a);circle=findobj(gca,'type','line');set(circle,'Color','red');打开Hold,以便于以前的图像不被删除。
增加训练装置和分类线在图中holdon;plotpv(P,T);plotpc(net.IW{1},net.b{1});holdoff;axis([-22-22]);最后放大感兴趣的区域这个感知器正确的区分了我们的新点(用红色表示)作为”zero”类(用圆圈表示),而不是”one”类(用+号表示),这个感知器在较短的时间内适当的学习线性不可分向量一个2输入神经元对模为5的输入向量不能进行分类因为他们是线性不可分的P=[-0.5-0.5+0.3-0.1-0.8;-0.5+0.5-0.5+1.0+0.0];T=[11000];plotpv(P,T);。












