您好,欢迎来到纷纭教育。
搜索
您的当前位置:首页matlab神经网络知识讲解

matlab神经网络知识讲解

来源:纷纭教育
精品文档

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.LW{2,1}=net.LW{2,1}*0.01; net.b{2}=net.b{2}+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; end

network1=[network1 errors1/26/100]; network2=[network2 errors2/26/100]; end

plot(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.IW{1}; 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.IW{1}; 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]); cla

w=net.IW{1};

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.IW{1,1},net.layers{1}.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]); cla

plotsom(net.IW{1,1},net.layers{1}.distances) 精品文档

精品文档

axis([0 1 0 1]); title('初始网络权值'); xlabel('w(i,1)'); ylabel('w(i,2)');

net.trainParam.epochs=1; net=train(net,P); cla

plotsom(net.IW{1,1},net.layers{1}.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; cla for 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 end end

title('输入向量'); xlabel('P(1)'); ylabel('P(2)');

net=newlvq(minmax(P),4,[.6 .4],.1); 精品文档

精品文档

hold on W1=net.IW{1};

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.IW{1};

W2=vec2ind(net.LW{2}); i=1; cla for 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 end end j=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 end end

title('输入/权值向量'); 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.50 0.6600 0.4609 0.1336 -0.2013 -0.4344 -0.5000 -0.3930 0-.17 0.0988 0.3072 0.3960 0.3449 0.1816 -0.0312 -0.21 -0.3021];

plot(P,T,'+'); title('训练样本'); xlabel('输入向量P'); ylabel('输出向量T'); P=-1:.1:1;

T=[-0.9602 -0.5770 -0.0297 0.3771 0.50 0.6600 0.4609 0.1336 -0.2013 -0.4344 -0.5000 -0.3930 0-.17 0.0988 0.3072 0.3960 0.3449 0.1816 -0.0312 -0.21 -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.50 0.6600 0.4609 0.1336 -0.2013 -0.4344 -0.5000 -0.3930 0-.17 0.0988 0.3072 0.3960 0.3449 0.1816 -0.0312 -0.21 -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 off sc=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))); end

axis([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))); end

axis([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 off

title('对新向量进行分类') 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 on

m=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 off view(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 on

outputline=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); figure t5=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;.437

9 .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.LW{1,1}; b=net.b{1,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 on

plot(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)) drawnow end

例子的最后会出现伪平衡点。

接着来看看三神经元的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 .77 .0196 .3137 0 1 .5686 .71 .6078;.7639 .8611 1 .88 .5972 .8194 0 .1528 .7917 .6528;.93 .57 .96 .94 .8 .96 .53 .70 1.12 .;.43 0 .1876 .3214 .1876 1 .1876 .1492 .2857 .3214; .1756 0 .0588 .1765 .3529 .2353 1 .9412 .5882 .71;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.; 82067 2256 6.21 0.26 30.5 0.31 1423.5 676.95; 403 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 1025; 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),:))); end for i=1:3

T(i,:)=(t(i,:)-min(t(i,:)))/(max(t(i,:))-min(t(i,:))); end

P_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,:); end

y1=[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)); end for 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,error2,'-+'); hold on;

plot(1:7,error3,'-h'); hold on;

plot(1:7,error4,'-d'); hold on;

plot(1:7,error5,'-o'); figure;

%绘制预测误差曲线 plot(1:2,error6,'-*'); hold on;

plot(1:2,error7,'-+'); hold on;

plot(1:2,error8,'-h'); hold on;

plot(1:2,error9,'-d'); 精品文档

精品文档

hold on;

plot(1:2,error10,'-o'); hold off;

这里主要还是要学习代码中的误差分析方法。

接着来看一个比较新的东西,神经网络模型预测控制器。

在matlab工作间中输入predcstr,就调出了相关的simulink模型。(研究催化剂的连续搅拌反应器)。通过产生随机的数据进行训练,最后进行simulink仿真的过程,这也算是神经网络较为高级的运用了。

再来看一组神经网络控制器——反馈线性化控制器 输入narmamaglev(磁悬浮系统的simulink模型)

大致上是了解了一下模型怎么使用,具体simulink模型的组成模块,要全部弄懂的话,还得花一番功夫啊。

2010-7-27

今天来学习神经网络的最后一个内容,关于图形界面的使用。

先来看一段图形界面的代码,在2010b中运行出错。 function guihd(arg)

if nargin==0

arg='Initialize'; end switch arg

case 'Initialize'

hf=figure('Position',[200 200 600 400],'Name','GUI_hd','NumberTitle','off'); ha=axes('Position',[.4 .1 .5 .7],'Box','on');

hbSin=uicontrol(hf,'Style','pushbutton','Position',[50 140 100 30],'String','plot

sin(x)','CallBack',['x=0:0.1:4*pi;' 'plot(x,sin(x));' 'axis([0 4*pi -1 1]);' 'xlabel(\"x\");' 'ylabel(\"y=sin(x)\");']); hb=uicontrol(hf,'Style','pushbutton','Position',[50 100 100 30],'String','plot

cos(x)','CallBack',['x=0:0.1:4*pi;' 'plot(x,cos(x));' 'axis([0 4*pi -1 1]);' 精品文档

精品文档

'Xlabel(\"x\");' 'ylabel(\"y=cos(x)\");']);

hbClose=uicontrol(hf,'Style','pushbutton','Position',[50

30],'String','Exit','CallBack','close');

60

100

case 'plot sin(x)'

case 'plot cos(x)' case 'Exit'

Otherwise

errordlg('请确认输入参数','出错了%>_<%'); end

具体的错误原多因还不知道,于是继续往下看。

主要还是要了解图形界面中的特殊的回调函数,M文件的调用以及函数句柄的调用,就不过多的和GUI的基础问题多做纠缠,直接进入到神经网络GUI界面nntool的学习当中。

其实matlab的nntool用法很简单通过一段时间的自己摸索相信就能够熟练掌握了~~

精品文档

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- fenyunshixun.cn 版权所有 湘ICP备2023022495号-9

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务