matlab神经网络.doc_第1页
matlab神经网络.doc_第2页
matlab神经网络.doc_第3页
matlab神经网络.doc_第4页
matlab神经网络.doc_第5页
免费预览已结束,剩余15页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Matlab神经网络工具箱2010-7-21今天学的是BP神经网络,首先看的是一个关于非线性函数逼近的例子,最后得出一个心得:在使用newff函数生成一个新的网络时,神经元的层数和每一层的神经元数会对结果造成不小的影响,一般都采用n,1的建立方法,其中n为隐层的神经元数,1为输出层的神经元数。然后是做了一个识别系统,算是一个较大的神经网络,具体的代码解释和分析如下:alphabet,targets=prprob;R,Q=size(alphabet);S2,Q=size(targets);S1=10;R,Q=size(alphabet);S2,Q=size(targets);P=alphabet;net=newff(minmax(P),S1,S2,logsig,logsig,traingdx);net.LW2,1=net.LW2,1*0.01;net.b2=net.b2+0.01;其中的proprob是matlab自带的一个生成字母表布尔值的函数。可以具体查看。T=targets;net.performFcn=sse;net.trainParam.goal=0.1;net.trainParam.show=20;net.trainParam.epochs=5000;net.trainParam.mc=0.95;net,tr=train(net,P,T)接下来首先进行无噪声训练。netn.trainParam.goal=0.6;netn.trainParam.epochs=300;T=targets targets targets targets;for pass=1:10 P=alphabet,alphabet,(alphabet+randn(R,Q)*0.1),(alphabet+randn(R,Q)*0.2); netn,tr=train(net,P,T);end接下来是有噪声训练,采用随机数生成影响输入矩阵的方式。这里收敛的有点慢,在应用于其他系统的时候值得注意。netn.trainParam.goal=0.1;netn.trainParam.epochs=500;netn.trainParam.show=5;P=alphabet;T=targets;net,tr=train(netn,P,T)接下来还进行无噪声训练,可能是前面的逼近情况已经很了理想了,这里只用了0次循环。noise_range=0:.05:.5; %标准差范围max_test=100; %噪声信号总数network1=;network2=;T=targets;for noiselevel=noise_range errors1=0; errors2=0; for i=1:max_test P=alphabet+randn(35,26)*noiselevel; A=sim(net,P);AA=compet(A); errors1=errors1+sum(sum(abs(AA-T)/2; An=sim(netn,P); AAn=compet(An); errors2=errors2+sum(sum(abs(AAn-T)/2; endnetwork1=network1 errors1/26/100;network2=network2 errors2/26/100;endplot(noise_range,network1*100,-,noise_range,network2*100);plot(noise_range,network1*100,-,noise_range,network2*100,+);title(识别误差);xlabel(噪声指标);ylabel(不同的训练方式);legend(无噪声训练,有噪声训练);以上是对系统性能的分析。这里的compet函数从help上来更像是一个滤波函数,而sum函数则是用来求一个多维矩阵中各行列的和值。noisyJ=alphabet(:,1)+randn(35,1)*0.2;plotchar(noisyJ);A2=sim(net,noisyJ);A2=compet(A2);answer=find(compet(A2)=1);plotchar(alphabet(:,answer);这里面plotchar函数就是将布尔值向量转变成具体的字母图形,下上代码是对具体的情况进行识别。noisyJ=alphabet(:,10)+randn(35,1)*0.2;subplot(1,2,1);plotchar(noisyJ)A2=sim(net,noisyJ);A2=compet(A2);answer=find(compet(A2)=1);subplot(1,2,2);plotchar(alphabet(:,answer);这段代码暴露了系统还不太成熟的一面noisyJ=alphabet(:,23)+randn(35,1)*0.2;subplot(1,2,1);plotchar(noisyJ);A2=sim(net,noisyJ);A2=compet(A2);answer=find(compet(A2)=1);subplot(1,2,2);plotchar(alphabet(:,answer);同上,这也是一种识别出错的情况。noisyJ=alphabet(:,4);subplot(1,2,1);plotchar(noisyJ);A2=sim(net,noisyJ);A2=compet(A2);answer=find(compet(A2)=1);subplot(1,2,2);plotchar(alphabet(:,answer);这是不加噪声干扰的情况,识别仍然出错,可见训练还远没有达到要求。目前遇到这种问题只能通过增大训练强度来解决。2010-7-22今天学习的是自组织竞争神经网络。是一种不是基于标准答案的学习过程,而是一种基于输入数据的归类而实现的数据分析的网络。下面主要还是来看几个典型的实例:1.模式分类X=0 1;0 1;clusters=8;points=10;std_dev=.05;P=nngenc(X,clusters,points,std_dev);plot(P(1,:),P(2,:),+r);title(输入向量);xlabel(P(1);ylabel(P(2);%以上是为了产生一系列自由排列的8组数据点集,每组有10个数据点net=newc(0 1;0 1,8,.1);w=net.IW1;plot(P(1,:),P(2,:),+r);hold on;circle=plot(w(:,1),w(:,2),ob)net.trainParam.epochs=7;net=train(net,P);w=net.IW1;delete(circle);plot(w(:,1),w(:,2),ob);p=0;.2;a=sim(net,p)一开始之所以只有一个蓝圈,是因为网络未加训练,网络权值位于向量中心。后来通过训练之后已经具备分类的功能,最后得出的结果是输入向量归于第4个输入类别。2.一维自组织特征映射网络设计angles=0:0.5*pi/99:0.5*pi;P=sin(angles);cos(angles);plot(P(1,:),P(2,:),+r);title(输入向量);xlabel(P(1);ylabel(P(2);net=newsom(0 1;0 1,10);claw=net.IW1;circle=plot(w(:,1),w(:,2),ob);title(初始网络权值);xlabel(w(i,1);ylabel(w(i,2);net.trainParam.epochs=10;net=train(net,P);delete(circle);plotsom(net.IW1,1,net.layers1.distances)title(训练后的网络权值);xlabel(w(i,1);ylabel(w(i,2);p=0.5;0.5;a=sim(net,p)注意这个网络运行有一定的波动性,不是很稳定。通过一系列的测试用例,发现目前该网络的精确性还不够强。3.二维自组织特征映射网络设计P=rand(2,500);plot(P(1,:),P(2,:),+r);axis(-1 1 -1 1);title(输入向量);xlabel(P(1);ylabel(P(2);net=newsom(0 1;0 1,5 6);claplotsom(net.IW1,1,net.layers1.distances)axis(0 1 0 1);title(初始网络权值);xlabel(w(i,1);ylabel(w(i,2);net.trainParam.epochs=1;net=train(net,P);claplotsom(net.IW1,1,net.layers1.distances)axis(-1 1 -1 1);title(训练后的网络);xlabel(w(i,1);ylabel(w(i,2);p=0.5;0.3; a=sim(net,p)由于初始矩阵具有随机性,所以每次得到的结果存在一定的差异。4.lvq模式的分类网络设计P=-3 -2 -2 0 0 0 0 2 2 3;0 1 -1 2 1 -1 -2 1 -1 0;C=1 1 1 2 2 2 2 1 1 1;T=ind2vec(C);i=1;clafor i=1:10 if C(i)=1 plot(P(1,i),P(2,i),+) hold on else plot(P(1,i),P(2,i),o) hold on endendtitle(输入向量);xlabel(P(1);ylabel(P(2);net=newlvq(minmax(P),4,.6 .4,.1);hold onW1=net.IW1;plot(W1(1,1),W1(1,2),*);title(输入/权值向量);xlabel(P(1),W(1);ylabel(P(2),W(2);net.trainParam.epochs=150;net.trainParam.show=Inf;net=train(net,P,T);W1=net.IW1;W2=vec2ind(net.LW2);i=1;clafor i=1:10 if C(i)=1 plot(P(1,i),P(2,i),+) hold on else plot(P(1,i),P(2,i),o) hold on endendj=1;for i=1:4 if W2(j)=1 plot(W1(j,1),W2(j,2),+,markersize,15) hold on else plot(W1(j,1),W2(j,2),o,markerszie,15) hold on endendtitle(输入/权值向量);xlabel(P(1),W(1);ylabel(P(2),W(2);%对网络进行检验p=0.2;1;a=vec2ind(sim(net,p)2010-7-23今天来看看径向基函数神经网络。相关的理论在笔记本上有选择的摘抄,先来看看几点应用:首先是利用径向基函数网络来实现函数逼近的一个实例。P=-1:.1:1;T=-0.9602 -0.5770 -0.0297 0.3771 0.6450 0.6600 0.4609 0.1336 -0.2013 -0.4344 -0.5000 -0.3930 0-.1647 0.0988 0.3072 0.3960 0.3449 0.1816 -0.0312 -0.2189 -0.3021;plot(P,T,+);title(训练样本);xlabel(输入向量P);ylabel(输出向量T);P=-1:.1:1;T=-0.9602 -0.5770 -0.0297 0.3771 0.6450 0.6600 0.4609 0.1336 -0.2013 -0.4344 -0.5000 -0.3930 0-.1647 0.0988 0.3072 0.3960 0.3449 0.1816 -0.0312 -0.2189 -0.3021;plot(P,T,+);title(训练样本);xlabel(输入向量P);ylabel(输出向量T);p=-3:.1:3;a=radbas(p);plot(p,a);title(径向基传递函数);xlabel(输入p);ylabel(输出a);a2=radbas(p -1.5);a3=radbas(p+2);a4=a+a2*1+a3*0.5;plot(p,a,b-,p,a3,b-,p,a4,m-);%输出层的线性神经元将三个径向基函数的权值相加title(径向基传递函数的权值之和);ylabel(输出a);xlabel(输入p);plot(P,T,+);xlabel(输入);X=-1:.01:1;Y=sim(net,X);hold on;plot(X,Y);hold off;legend(目标,输出);对于newrb函数来说,散布常数是对网络仿真影响较大的一个参数,下面来看一个关于不同散布常数的实例:P=-1:.1:1;T=-0.9602 -0.5770 -0.0297 0.3771 0.6450 0.6600 0.4609 0.1336 -0.2013 -0.4344 -0.5000 -0.3930 0-.1647 0.0988 0.3072 0.3960 0.3449 0.1816 -0.0312 -0.2189 -0.3021;plot(P,T,+);title(训练样本);xlabel(输入向量P);ylabel(输出向量T);eg=0.02;sc=.01;net=newrb(P,T,eg,sc);X=-1:.01:1;Y=sim(net,X);hold on;plot(X,Y);hold offsc=100;net=newrb(P,T,eg,sc);Y=sim(net,P);hold on;plot(P,Y);hold off;sc=10;net=newrb(P,T,eg,sc);Y=sim(net,P);hold on;plot(P,Y);hold off;以上是模拟散布常数过大,过小以及比较恰当时候的拟合情况。在实际运用过程中,如果径向基神经元的散布常数选择不当,会造成网络设计中神经元数目过少或者过多,在函数逼近中就会造成过适性和不适性。最后,径向基神经网络的一个重要作用就是进行变量分类。P=1 2;2 2;1 1;Tc=1 2 3;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);endaxis(0 3 0 3);title(三向量及其类别);xlabel(P(1,:);ylabel(P(2,:);T=ind2vec(Tc);spread=1;net=newpnn(P,T,spread);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);endaxis(0 3 0 3)title(网络测试结果);xlabel(P(1,:);ylabel(P(2,:);p=2;1.5;a=sim(net,p);ac=vec2ind(a);hold on;plot(P(1),P(2),*,markersize,10,color,1 0 0)text(p(1)+0.1,p(2),sprintf(class%g,ac)hold offtitle(对新向量进行分类)xlabel(p(1,:) 与p(1)ylabel(p(2,:) 与p(2)p1=0:.05:3;p2=p1;p1,p2=meshgrid(p1,p2);pp=p1(:),p2(:);aa=sim(net,pp);aa=full(aa);m=mesh(p1,p2,reshape(aa(1,:),length(p1),length(p2);set(m,facecolor,0 0.5 1,linestyle,none);hold onm=mesh(p1,p2,reshape(aa(2,:),length(p1),length(p2);set(m,facecolor,0 0.1 0.5,linestyle,none);m=mesh(p1,p2,reshape(aa(3,:),length(p1),length(p2);set(m,facecolor,0.5 0 1,linestyle,none);plot3(p(1,:),p(2,:),1 1 1+0.1,.,markersize,30)plot3(p(1),p(2),1.1,*,markersize,10,color,1 0 0)hold offview(2)title(向量分类立体图);xlabel(p(1,:)与p(1);ylabel(p(2,:)与p(2);最后再来看一个广义回归神经(GRNN)网络用在函数逼近上的例子:P=1 2 3 4 5 6 7 8;T=0 1 2 3 2 1 2 1;plot(P,T,.,markersize,30);axis(0 9 -1 4)title(待逼近函数);xlabel(P);ylabel(T);axis(0 9 -1 4)title(待逼近函数);xlabel(P);ylabel(T);spread=0.7;net=newgrnn(P,T,spread);A=sim(net,P);hold onoutputline=plot(P,A,o,markersize,10,color,1 0 0);title(检测网络)xlabel(P);ylabel(T和A)p=3.5;a=sim(net,p);plot(p,a,+,markersize,10,color,1 0 0);title(新输入值)xlabel(P和p)ylabel(T和a)P2=0:.1:9;A2=sim(net,P2);plot(P2,A2,linewidth,4,color,1 0 0)title(逼近函数)xlabel(P和P2)ylabel(T和A2)2010-7-24今天学习最后一种神经网络反馈神经网络。什么是反馈的神经网络?与前面的网络不同,这里的神经网络包含有延迟的输入或者输出的反馈。这样使得网络具有了记忆功能。首先是Hopfield神经网络。在help文档的demo里有一个很好的实例,这里就不举出来了。那个例子个人理解可以看成是一个,最后的结果通过神经网络使得随机点最后运动与指定的点重合。不过这个实例中的sim函数用法很特别,要注意一下。接下来是Elman神经网络。t=1:20;p1=sin(t);p2=sin(t)*2;plot(t,p1,r);hold on;plot(t,p2,b-);hold on;t1=ones(1,20);t2=ones(1,20)*2;p=p1 p2 p1 p2;t=t1 t2 t1 t2;Pseq=con2seq(p);Tseq=con2seq(t);R=1;S2=1;S1=10;%R S2 S1分别为输入元素的数目,输出层的神经元数,中间层的神经元数net=newelm(-2,2,S1,S2,tansig,purelin);net.trainParam.epochs=500;net=train(net,Pseq,Tseq);y=sim(net,Pseq);figuret5=1:80;plot(t5,cat(2,y:),t5,cat(2,Tseq:),b-);p3=sin(1:20)*1.6;t3=ones(1,20)*1.6;p4=sin(1:20)*1.2;t4=ones(1,20)*1.2;%产生测试输入样本pg=p3 p4 p3 p4;%产生测试目标样本tg=t3 t4 t3 t4;pgseq=con2seq(pg);a=sim(net,pgseq);figure;plot(t5,cat(2,a:),t5,tg,b-);这是一个信号处理方面的例子,不太懂。接下来是一个具体的应用实例:P=.4413 .4707 .6953 .8133 .4379 .4677 .6981 .8002 .4517 .4725 .7006 .8201;.4379 .4677 .6981 .8002 .4517 .4725 .7006 .8201 .4557 .4790 .7019 .8211;.4517 .4725 .7006 .8201 .4557 .4790 .7019 .8211 .4601 .4911 .7101 .8298;T=.4557 .4790 .7019 .8211;.4601 .4911 .7101 .8298;.4612 .4845 .7188 .8312;threshold=0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1;a=11 17 23;for i=1:3 net=newelm(threshold,a(i),4,tansig,purelin); net.trainParam.epochs=1000; net=init(net); net=train(net,P,T); y=sim(net,P); error(i,:)=y-T;end接着来看看双向联想记忆神经网络前面介绍的Hopfield可以实现自联想,CNP可以实现异联想,这里的BAM则是双向联想。不过很可惜,双向联想神经网络并没有matlab实例代码。接着还是来看一下反馈网络的一些具体的运用。首先是关于Hopfield网络的不稳定性T = +1 -1; . -1 +1;plot(T(1,:),T(2,:),r*)axis(-1.1 1.1 -1.1 1.1)title(Hopfield Network State Space)xlabel(a(1);ylabel(a(2);net = newhop(T);W=net.LW1,1;b=net.b1,1;Ai=T;Y,Pf,Af=sim(net,2,Ai);a = rands(2,1);y,Pf,Af = sim(net,1 50,a);record = cell2mat(a) cell2mat(y);start = cell2mat(a);hold onplot(start(1,1),start(2,1),bx,record(1,:),record(2,:)plot(0,0,ko);P=-1.0 -0.5 0.0 0.5 1.0;-1.0 -0.5 0.0 0.5 1.0;color=rgbmy;for i=1:5 a=P(:,i); y,Pf,Af=sim(net,1 50,a); record=cell2mat(a) cell2mat(y); start=cell2mat(a); plot(start(1,1),start(2,1),kx,record(1,:),record(2,:),color(rem(i,5)+1) drawnowend例子的最后会出现伪平衡点。接着来看看三神经元的Hopfield神经网络的设计在matlab的demo中有相关的例子。反馈型神经网络在解决TSP问题中用的比较广泛,有空再去好好看一下2010-7-25到昨天为止,神经网络的几种主要类型就已经全部过了一遍,今天主要是看一下一些具体的实战例子。很显然,神经网络的一大用途就是用来预测,主要还是BP网络用的比较广泛。不过这里要提到一个利用自组织竞争函数网络来做预测的例子。P=.3125 .3125 0 0 .1875 0 1 0.5 .1875 .5;.45 .49 .65 .6 .5 .62 .36 .43 .42 .43;.4902 .3333 .7647 .0196 .3137 0 1 .5686 .6471 .6078;.7639 .8611 1 .8889 .5972 .8194 0 .1528 .7917 .6528;.93 .57 .96 .94 .8 .96 .53 .70 1.12 .89;.4643 0 .1876 .3214 .1876 1 .1876 .1492 .2857 .3214; .1756 0 .0588 .1765 .3529 .2353 1 .9412 .5882 .6471;3.9 6.3 3.5 3.9 5.0 3.5 6.3 4.1 5.1 5.4;.0473 .8581 .2162 .1081 .1419 0 1 1 .0405 .0405;.5 12 .03 .2 1 .2 15 0 .02 0;.1 2.4 .28 .4 1.1 .15 2.8 .22 1 .3;net=newc(minmax(P),3,0.1);net=init(net);net=train(net,P);y=sim(net,P);y=vec2ind(y);以上的代码通过具体的分类(可以理解为震级)来达到预测的目的。接着的一个例子提到了GRNN比BP和RBF存在逼近能力,分类能力和学习速率上的优势,且不会出现局部最小值点。p=58478 135185 5.46 0.23 16.5 0.21 1005.3 585.44; 67884 152369 5.46 0.27 18.7 0.26 1005.6 575.03; 74462 182563 6.01 0.25 21.6 0.28 1204.6 601.23; 78345 201587 6.12 0.26 25.8 0.29 1316.5 627.89; 82067 225689 6.21 0.26 30.5 0.31 1423.5 676.95; 89403 240568 6.37 0.28 34.9 0.33 1536.2 716.32; 95933 263856 6.38 0.28 39.8 0.36 1632.2 765.24; 104790 285697 6.65 0.30 42.5 0.39 1753.2 812.22; 116694 308765 6.65 0.30 46.7 0.41 1865.5 875.26;t=102569 52365 46251; 124587 60821 56245; 148792 69253 67362; 162568 79856 78165; 186592 91658 90548; 205862 99635 98752; 226598 109862 102564; 245636 120556 111257; 263595 130378 120356;a=1 2 3 5 7 8;P=p;T=t;for i=1:6 P(a(i),:)=(p(a(i),:)-min(p(a(i),:)/(max(p(a(i),:)-min(p(a(i),:);endfor i=1:3 T(i,:)=(t(i,:)-min(t(i,:)/(max(t(i,:)-min(t(i,:);endP_train=P(:,1) P(:,2) P(:,3) P(:,4) P(:,5) P(:,6) P(:,7);T_train=T(:,1) T(:,2) T(:,3) T(:,4) T(:,5) T(:,6) T(:,7);P_test=P(:,8) P(:,9);T_test=T(:,8) T(:,9);for i=1:5 net=newgrnn(P_train,T_train,i/10); temp=sim(net,P_train); j=3*i; y_out(j-2,:)=temp(1,:); y_out(j-1,:)=temp(2,:); y_out(j,:)=temp(3,:); temp=sim(net,P_test); y(j-2,:)=temp(1,:); y(j-1,:)=temp(2,:); y(j,:)=temp(3,:);endy1=y_out(1,:);y_out(2,:);y_out(3,:);y1=y_out(4,:);y_out(5,:);y_out(6,:);y2=y_out(4,:);y_out(5,:);y_out(6,:);y3=y_out(7,:);y_out(8,:);y_out(9,:);y4=y_out(10,:);y_out(11,:);y_out(12,:);y5=y_out(13,:);y_out(14,:);y_out(15,:);y6=y(1,:);y(2,:);y(3,:);y7=y(4,:);y(5,:);y(6,:);y8=y(7,:);y(8,:);y(9,:);y9=y(10,:);y(11,:);y(12,:);y10=y(13,:);y(14,:);y(15,:);%计算逼近误差for i=1:7 error1(i)=norm(y1(:,i)-T_train(:,i); error2(i)=norm(y2(:,i)-T_train(:,i); error3(i)=norm(y3(:,i)-T_train(:,i); error4(i)=norm(y4(:,i)-T_train(:,i); error5(i)=norm(y5(:,i)-T_train(:,i);endfor i=1:2 error6(i)=norm(y6(:,i)-T_test(:,i); error7(i)=norm(y7(:,i)-T_test(:,i); error8(i)=norm(y8(:,i)-T_test(:,i); error9(i)=norm(y9(:,i)-T_test(:,i); error10(i)=norm(y10(:,i)-T_test(:,i);end%绘制逼近误差曲线plot(1:7,error1,-*);hold on;plot(1:7,e

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论