matlab神经网络.docx

上传人:b****5 文档编号:7686641 上传时间:2023-01-25 格式:DOCX 页数:23 大小:27.43KB
下载 相关 举报
matlab神经网络.docx_第1页
第1页 / 共23页
matlab神经网络.docx_第2页
第2页 / 共23页
matlab神经网络.docx_第3页
第3页 / 共23页
matlab神经网络.docx_第4页
第4页 / 共23页
matlab神经网络.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

matlab神经网络.docx

《matlab神经网络.docx》由会员分享,可在线阅读,更多相关《matlab神经网络.docx(23页珍藏版)》请在冰豆网上搜索。

matlab神经网络.docx

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=[targetstargetstargetstargets];

forpass=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;

fornoiselevel=noise_range

          errors1=0;

          errors2=0;

          fori=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=[network1errors1/26/100];

network2=[network2errors2/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=[01;01];

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([01;01],8,。

1);

w=net。

IW{1};

plot(P(1,:

),P(2,:

),’+r');

holdon;

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([01;01],[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([—11-11]);

title('输入向量’);

xlabel('P

(1)');

ylabel(’P

(2)’);

net=newsom([01;01],[56]);

cla

plotsom(net。

IW{1,1},net.layers{1}。

distances)

axis([0101]);

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([-11—11]);

title(’训练后的网络’);

xlabel(’w(i,1)’);

ylabel(’w(i,2)');

p=[0。

5;0。

3];

a=sim(net,p)

由于初始矩阵具有随机性,所以每次得到的结果存在一定的差异.

4.lvq模式的分类网络设计

P=[-3-2—20000223;01—121-1—21-10];

C=[1112222111];

T=ind2vec(C);

i=1;

cla

fori=1:

10

        ifC(i)==1

            plot(P(1,i),P(2,i),'+')

            holdon

        else

            plot(P(1,i),P(2,i),'o')

            holdon

        end

end

title('输入向量');

xlabel(’P

(1)');

ylabel(’P

(2)');

net=newlvq(minmax(P),4,[.6。

4],.1);

holdon

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

fori=1:

10

      ifC(i)==1

            plot(P(1,i),P(2,i),'+’)

            holdon

        else

            plot(P(1,i),P(2,i),'o')

            holdon

        end

end

j=1;

fori=1:

4

        ifW2(j)==1

            plot(W1(j,1),W2(j,2),’+','markersize’,15)

            holdon

        else

            plot(W1(j,1),W2(j,2),’o','markerszie',15)

            holdon

        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.02970。

37710.64500。

66000。

46090。

1336-0.2013—0。

4344-0。

5000—0。

39300-.16470。

09880。

30720.39600。

34490。

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。

02970。

37710。

64500.66000.46090.1336—0.2013—0.4344—0.5000-0。

39300-。

16470.09880。

30720。

39600.34490。

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);

holdon;

plot(X,Y);

holdoff;

legend({’目标’,’输出'});

 

 

对于newrb函数来说,散布常数是对网络仿真影响较大的一个参数,下面来看一个关于不同散布常数的实例:

P=—1:

.1:

1;

T=[—0。

9602—0。

5770—0。

02970.37710.64500.66000.46090。

1336—0。

2013-0.4344-0.5000—0。

39300-.16470。

09880。

30720.39600。

34490。

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);

holdon;

plot(X,Y);

holdoff

sc=100;

net=newrb(P,T,eg,sc);

Y=sim(net,P);

holdon;

plot(P,Y);

holdoff;

sc=10;

net=newrb(P,T,eg,sc);

Y=sim(net,P);

holdon;

plot(P,Y);

holdoff;

以上是模拟散布常数过大,过小以及比较恰当时候的拟合情况。

在实际运用过程中,如果径向基神经元的散布常数选择不当,会造成网络设计中神经元数目过少或者过多,在函数逼近中就会造成过适性和不适性。

 

最后,径向基神经网络的一个重要作用就是进行变量分类。

P=[12;22;11]’;

Tc=[123];

plot(P(1,:

),P(2,:

),’。

’,'markersize',30)

fori=1:

3

      text(P(1,i)+0.1,P(2,i),sprintf(’class%g',Tc(i)));

end

axis([0303]);

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)

fori=1:

3

      text(P(1,i)+0。

1,P(2,i),sprintf('class%g',Ac(i)));

end

axis([0303])

title('网络测试结果');

xlabel('P(1,:

)’);

ylabel('P(2,:

)');

p=[2;1.5];

a=sim(net,p);

ac=vec2ind(a);

holdon;

plot(P

(1),P

(2),’*’,'markersize’,10,’color',[100])

text(p

(1)+0.1,p

(2),sprintf(’class%g’,ac))

holdoff

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’,[00。

51],'linestyle',’none');

holdon

m=mesh(p1,p2,reshape(aa(2,:

),length(p1),length(p2)));

set(m,’facecolor’,[00.10.5],’linestyle','none');

m=mesh(p1,p2,reshape(aa(3,:

),length(p1),length(p2)));

set(m,'facecolor',[0。

501],'linestyle’,’none');

plot3(p(1,:

),p(2,:

),[111]+0.1,’.’,'markersize',30)

plot3(p

(1),p

(2),1.1,'*','markersize',10,’color’,[100])

holdoff

view

(2)

title(’向量分类立体图’);

xlabel('p(1,:

)与p

(1)’);

ylabel(’p(2,:

)与p

(2)');

 

最后再来看一个广义回归神经(GRNN)网络用在函数逼近上的例子:

P=[12345678];

T=[01232121];

plot(P,T,'.','markersize’,30);

axis([09—14])

title('待逼近函数');

xlabel('P');

ylabel('T’);

axis([09—14])

title('待逼近函数’);

xlabel('P’);

ylabel('T');

spread=0.7;

net=newgrnn(P,T,spread);

A=sim(net,P);

holdon

outputline=plot(P,A,'o’,'markersize’,10,'color’,[100]);

title('检测网络’)

xlabel('P’);

ylabel(’T和A')

p=3。

5;

a=sim(net,p);

plot(p,a,'+’,'markersize',10,'color’,[100]);

title(’新输入值’)

xlabel(’P和p')

ylabel(’T和a’)

P2=0:

.1:

9;

A2=sim(net,P2);

plot(P2,A2,'linewidth’,4,'color',[100])

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');

holdon;

plot(t,p2,’b——’);

holdon;

t1=ones(1,20);

t2=ones(1,20)*2;

p=[p1p2p1p2];

t=[t1t2t1t2];

Pseq=con2seq(p);

Tseq=con2seq(t);

R=1;

S2=1;

S1=10;

%RS2S1分别为输入元素的数目,输出层的神经元数,中间层的神经元数

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;

p

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1