人工神经网络1DOC.docx

上传人:b****0 文档编号:18247482 上传时间:2023-08-14 格式:DOCX 页数:23 大小:156.27KB
下载 相关 举报
人工神经网络1DOC.docx_第1页
第1页 / 共23页
人工神经网络1DOC.docx_第2页
第2页 / 共23页
人工神经网络1DOC.docx_第3页
第3页 / 共23页
人工神经网络1DOC.docx_第4页
第4页 / 共23页
人工神经网络1DOC.docx_第5页
第5页 / 共23页
人工神经网络1DOC.docx_第6页
第6页 / 共23页
人工神经网络1DOC.docx_第7页
第7页 / 共23页
人工神经网络1DOC.docx_第8页
第8页 / 共23页
人工神经网络1DOC.docx_第9页
第9页 / 共23页
人工神经网络1DOC.docx_第10页
第10页 / 共23页
人工神经网络1DOC.docx_第11页
第11页 / 共23页
人工神经网络1DOC.docx_第12页
第12页 / 共23页
人工神经网络1DOC.docx_第13页
第13页 / 共23页
人工神经网络1DOC.docx_第14页
第14页 / 共23页
人工神经网络1DOC.docx_第15页
第15页 / 共23页
人工神经网络1DOC.docx_第16页
第16页 / 共23页
人工神经网络1DOC.docx_第17页
第17页 / 共23页
人工神经网络1DOC.docx_第18页
第18页 / 共23页
人工神经网络1DOC.docx_第19页
第19页 / 共23页
人工神经网络1DOC.docx_第20页
第20页 / 共23页
亲,该文档总共23页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

人工神经网络1DOC.docx

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

人工神经网络1DOC.docx

人工神经网络1DOC

人工神经网络——BP网络

1.BP神经网络逼近函数

步骤1:

假设频率参数k=1,绘制要逼近的非线性函数的曲线。

函数的曲线如图1所示

k=1;

p=[-1:

.05:

8];

t=1+sin(k*pi/4*p);

plot(p,t)

title('要逼近的非线性函数');

xlabel('时间');

ylabel('非线性函数');

图1要逼近的非线性函数曲线

步骤2:

网络的建立

应用newff()函数建立BP网络结构。

隐层神经元数目n可以改变,暂设为n=3,输出层有一个神经元。

选择隐层和输出层神经元传递函数分别为tansig函数和purelin函数,网络训练的算法采用Levenberg–Marquardt算法trainlm。

n=3;

net=newff(minmax(p),[n,1],{'tansig''purelin'},'trainlm');

对于初始网络,可以应用sim()函数观察网络输出

y1=sim(net,p);

figure;

plot(p,t,'-',p,y1,':

')

title('未训练网络的输出结果');

xlabel('时间');

ylabel('仿真输出--原函数-');

同时绘制网络输出曲线,并与原函数相比较,结果如图2所示。

图2未训练网络的输出结果

 

其中“”代表要逼近的非线性函数曲线;

“‥‥‥”代表未经训练的函数曲线;

因为使用newff()函数建立函数网络时,权值和阈值的初始化是随机的,所以网络输出结构很差,根本达不到函数逼近的目的,每次运行的结果也有时不同。

 

步骤3:

网络训练

应用train()函数对网络进行训练之前,需要预先设置网络训练参数。

将训练时间设置为50,训练精度设置为0.01,其余参数使用缺省值。

训练后得到的误差变化过程如图3所示。

 

图3

 

net.trainParam.epochs=50;%网络训练步骤设置为50

net.trainParam.goal=0.01;%网络训练精度设置为0.01

net=train(net,p,t);%开始训练网络

TRAINLM,Epoch0/50,MSE2.26463/0.01,Gradient364.666/1e-010

TRAINLM,Epoch9/50,MSE0.0096751/0.01,Gradient16.4769/1e-010

TRAINLM,Performancegoalmet.

从以上结果可以看出,网络训练速度很快,经过一次循环跌送过程就达到了要求的精度0.01。

步骤4:

网络测试

对于训练好的网络进行仿真:

y2=sim(net,p);

figure;

plot(p,t,'-',p,y1,':

',p,y2,'--')

title('训练后网络的输出结果');

xlabel('时间');

ylabel('仿真输出');

绘制网络输出曲线,并与原始非线性函数曲线以及未训练网络的输出结果曲线相比较,比较出来的结果如图4所示。

图4训练后网络的输出结果

其中“”代表要逼近的非线性函数曲线;

“‥‥‥”代表未经训练的函数曲线;

“―――”代表经过训练的函数曲线;

从图中可以看出,得到的曲线和原始的非线性函数曲线很接近。

这说明经过训练后,BP网络对非线性函数的逼近效果比较好。

不同频率下的逼近效果

改变非线性函数的频率和BP函数隐层神经元的数目,对于函数逼近的效果有一定的影响。

网络非线性程度越高,对于BP网络的要求越高,则相同的网络逼近效果要差一些;隐层神经元的数目对于网络逼近效果也有一定影响,一般来说隐层神经元数目越多,则BP网络逼近非线性函数的能力越强。

下面通过改变频率参数和非线性函数的隐层神经元数目来加以比较证明。

(1)频率参数设为k=1,当隐层神经元数目分别取n=3、n=6、n=8,时得到了训练后的网络输出结果如图5、6、7所示。

图5当n=3时训练后网络的输出结果

 

图6当n=6时训练后网络的输出结果

图7当n=8时训练后网络的输出结果

其中“”代表要逼近的非线性函数曲线;

“‥‥‥”代表未经训练的函数曲线;

“―――”代表经过训练的函数曲线;

(2)频率参数设为k=2,当隐层神经元数目分别取n=3、n=6、n=8时,得到了训练后的网络输出结果如图8、9、10所示。

图8当n=3时训练后网络的输出结果

 

图9当n=6时训练后网络的输出结果

图10当n=8时训练后网络的输出结果

其中“”代表要逼近的非线性函数曲线;

“‥‥‥”代表未经训练的函数曲线;

“―――”代表经过训练的函数曲线;

(3)频率参数设为k=4,当隐层神经元数目分别取n=3、n=6、n=8时,得到了训练后的网络输出结果如图11、12、13所示。

图11当n=3时训练后网络的输出结果

 

图12当n=6时训练后网络的输出结果

图13当n=8时训练后网络的输出结果

 

其中“”代表要逼近的非线性函数曲线;

“‥‥‥”代表未经训练的函数曲线;

“―――”代表经过训练的函数曲线;

结论

通过上述仿真结果可知,当k=1,n=3时;k=2,n=8时;k=4,n=8时;BP神经网络分别对函数取得了较好的逼近效果。

由此可见,n取不同的值对函数逼近的效果有很大的影响。

改变BP网络隐层神经元的数目,可以改变BP神经网络对于函数的逼近效果。

隐层神经元数目越多,则BP网络逼近非线性函数的能力越强。

 

1、或门的实现:

1)>>net=newp([01;-22],1);

P=[0011;0101];

T=[0111];

net=init(net);

Y1=sim(net,P)

net.trainParam.epochs=25;

net=train(net,P,T);

Y=sim(net,P)

输出结果:

Y1=

1111

Y=

0111

 

Matlab中运行结果图

 

2、与门的实现

1)>>net=newp([01;-22],1);

P=[0011;0101];

T=[0001];

net=init(net);

Y1=sim(net,P)

net.trainParam.epochs=20;

net=train(net,P,T);

Y=sim(net,P)

Y1=

1111

Y=

0001

 

Matlab中运行结果图

 

3、异或问题的实现

>>%Perceptrons_02

%用两层感知器实现异或

%第一层是随机层,即权重何偏差随机确定,以第一层的输出作为第二层的输入

pr1=[01;01];%随机感知器输入的范围

net1=newp(pr1,3);

net1.inputweights{1}.initFcn='rands';

net1.biases{1}.initFcn='rands';

index=0;

whileindex==0

net1=init(net1);

iw1=net1.IW{1}

b1=net1.b{1}

p1=[0011;0101];

[a1,pr]=sim(net1,p1);

pr2=[01;01;01];

net2=newp(pr2,1);

net2.trainParam.epochs=10;

net2.trainParam.show=1;

%p2=a1;%最好不要直接赋值,可能a2=sim(net2,p2)不能正常运行

p2=ones(size(a1));

p2=p2.*a1;

t2=[0110];

[net2,tr2]=train(net2,p2,t2);

epoch2=tr2.epoch

perf2=tr2.perf

iw2=net2.IW{1}

b2=net2.b{1}

a2=sim(net2,p2)

savePercept02net1net2

ifa2==t2

index=1;

end

end

输出结果:

iw1=

-0.8379-0.3614

0.7022-0.2502

0.12410.7356

b1=

0.6954

-0.5815

-0.0898

epoch2=

012345678

perf2=

0.50000.75000.50000.75000.50001.00000.75000.50000

iw2=

221

b2=

-3

a2=

0110

4、使用感知器将二维的四组输入矢量分成两类

P=[-0.5-0.5+0.3-0.1+0.20.0+0.6+0.8;

-0.5+0.5-0.5+1.0+0.5-0.9+0.8-0.6];

T=[11011010];

plotpv(P,T);

net=newp([-11;-11],1);

watchon;

cla;

plotpv(P,T);

linehandle=plotpc(net.IW{1},net.b{1});

E=1;

net=init(net);

linehandle=plotpc(net.IW{1},net.b{1});

while(sse(E))

[net,Y,E]=adapt(net,P,T);

linehandle=plotpc(net.IW{1},net.b{1},linehandle);

drawnow;

end;

pause

watchoff;

 

 

2、0-9数字的识别

%建立样本库

%输入源样本1,2,3,4为不同字体数字

clearall

forpcolum=0:

39

p1=ones(30,30);%建立全为1的样本矩阵

m=strcat('E:

\MATLAB7\work\123\sjwl\num\',int2str(pcolum),'.jpg');

I=imread(m);%循环读入0-39个样本数字文件

I1=im2bw(I,0.3);%对输入图像进行二值化处理采用全局阈值0.3

[m,n]=find(I1==0);

rowmin=min(m);

rowmax=max(m);

colummin=min(n);

colummax=max(n);

I2=I1(rowmin:

rowmax,colummin:

colummax);%截取是入图像中的数字部分

rate=30/max(size(I2));

I3=imresize(I2,rate);%对输入文件变尺寸处理

[i,j]=size(I3);

row=round((30-i)/2);

colum=round((30-j)/2);

p1(row+1:

row+i,colum+1:

colum+j)=I3;%建立起30*30的矩阵

p1=-1*p1+ones(30,30);%反色处理

forhh=1:

30

p((hh-1)*30+1:

(hh-1)*30+30,pcolum+1)=p1(hh,1:

30);

end%将处理的源样本输入供神经网络训练的样本pcolum是样本数循环变量

switchpcolum

case{0,10,20,30}

t(pcolum+1)=0%数字0

case{1,11,21,31}

t(pcolum+1)=1%数字1

case{2,12,22,32}

t(pcolum+1)=2%数字2

case{3,13,23,33}

t(pcolum+1)=3%数字3

case{4,14,24,34}

t(pcolum+1)=4%数字4

case{5,15,25,35}

t(pcolum+1)=5%数字5

case{6,16,26,36}

t(pcolum+1)=6%数字6

case{7,17,27,37}

t(pcolum+1)=7%数字7

case{8,18,28,38}

t(pcolum+1)=8%数字8

case{9,19,29,39}

t(pcolum+1)=9%数字9

end%建立与训练样本对应的输出值t

end

save51ETpt;

%训练网络

clearall

load51ETpt;%加载样本

pr(1:

900,1)=0;

pr(1:

900,2)=1;

net=newff(pr,[251],{'logsig''purelin'},'traingdx','learngdm');%创建BP网络

net.trainParam.epochs=3000;%设置训练步数

net.trainParam.goal=0.000000001;%设置训练目标

net.trainParam.show=10;%设置训练显示格数

net.trainParam.lr=0.05%设置训练学习率

net=train(net,p,t);%训练BP网络

saveET51netnet;

%使用网络

clearall

m=input('请输入测试样本(E:

\MATLAB7\work\123\sjwl\try\):

');

I=strcat('E:

\MATLAB7\work\123\sjwl\try\',int2str(m),'.jpg');

U=imread(I);

imview(U);%通过键盘输入添加试验样本

loadET51netnet;%加载以训练好的BP神经网络

p=zeros(900,1);%建立输入样本的空矩阵

p1=ones(30,30);%建立临时存放样本的30*30的矩阵

I1=im2bw(U,0.3);%对输入图像进行二值化处理采用全局阈值0.3

[m,n]=find(I1==0);

rowmin=min(m);

rowmax=max(m);

colummin=min(n);

colummax=max(n);

I2=I1(rowmin:

rowmax,colummin:

colummax);%截取是入图像中的数字部分

rate=30/max(size(I2));

I3=imresize(I2,rate);%对输入文件变尺寸处理

[i,j]=size(I3);

row=round((30-i)/2);

colum=round((30-j)/2);

p1(row+1:

row+i,colum+1:

colum+j)=I3;%建立起30*30的矩阵

p1=-1*p1+ones(30,30);%反色处理

forhh=1:

30

p((hh-1)*30+1:

(hh-1)*30+30,1)=p1(hh,1:

30);

end%将处理的源样本输入供神经网络训练的样本

x=sim(net,p);%测试网络

x=round(x);%输出网络识别结果

 

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

当前位置:首页 > 工程科技

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2