神经网络实验报告BP网络实现对Hermit函数逼近.docx

上传人:b****7 文档编号:9024286 上传时间:2023-02-02 格式:DOCX 页数:17 大小:57.48KB
下载 相关 举报
神经网络实验报告BP网络实现对Hermit函数逼近.docx_第1页
第1页 / 共17页
神经网络实验报告BP网络实现对Hermit函数逼近.docx_第2页
第2页 / 共17页
神经网络实验报告BP网络实现对Hermit函数逼近.docx_第3页
第3页 / 共17页
神经网络实验报告BP网络实现对Hermit函数逼近.docx_第4页
第4页 / 共17页
神经网络实验报告BP网络实现对Hermit函数逼近.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

神经网络实验报告BP网络实现对Hermit函数逼近.docx

《神经网络实验报告BP网络实现对Hermit函数逼近.docx》由会员分享,可在线阅读,更多相关《神经网络实验报告BP网络实现对Hermit函数逼近.docx(17页珍藏版)》请在冰豆网上搜索。

神经网络实验报告BP网络实现对Hermit函数逼近.docx

神经网络实验报告BP网络实现对Hermit函数逼近

 

实验报告

——基于BP网络的多层感知器

 

电气工程及其自动化四班

20080240402曹建

20080240406邓宏

一、神经网络结构图

O

输出层

W

隐层

Y0V

输入层

X0X

二、程序

1.单样本程序:

functionmain()

clc

closeall

p=1;Pmax=100;

q=1;Qmax=30000;

n=0.005;l=5;

Emin=0.1;

Erme=[];

rand('state',sum(100*clock));

w=rand(1,l);w0=0.5;

v=rand(1,l);v0=rand(1,l);

y0=-1;x0=-1;

forp=1:

Pmax

interrupt(p)=normrnd(0,0.1);

x(p)=8*(rand()-0.5);

d(p)=1.1*(1-x(p)+2*x(p)^2)*exp((-x(p)^2)/2);

end

while(q<=Qmax)

forp=1:

Pmax

y(p,:

)=logsig(v*x(p)+v0*x0);

o1(p)=w*y(p,:

)'+y0*w0;

o(p)=o1(p)+interrupt(p);

ek=d(p)-o(p);

fori=1:

l

ej(i)=w(i)*(d(p)-o(p))*y(p,i)*(1-y(p,i));

end

wc=n*ek*y(p,:

);w0c=n*ek*y0;vc=n*ej*x(p);v0c=n*ej*x0;

w=w+wc;w0=w0+w0c;v=v+vc;v0=v0+v0c;

E(p)=d(p)-o(p);

end

s2=0;

forp=1:

Pmax

s2=E(p)^2+s2;

end

e=(s2/Pmax)^0.5;

Erme=[Ermee];

ife<=Emin

break;

end

q=q+1;

end

Erme;

q

x=linspace(-4,4);

forp=1:

100

d(p)=1.1*(1-x(p)+2*x(p)^2)*exp((-x(p)^2)/2);

end

forp=1:

100

y(p,:

)=logsig(v*x(p)+v0*x0);

o1(p)=w*y(p,:

)'+y0*w0;

end

plot(Erme);

xlabel('误差的收敛曲线')

figure;

plot(x,d,'-r');

holdon;

plot(x,o1,'-.b');

xlabel('Hermit多项式曲线与所构建BP网络输出曲线')

最好的一次运行结果:

学习率=0.01,隐节点数=5

q=

2500

2.批处理程序:

functionmain()

clc

closeall

samnum=100;

testsamnum=101;

hiddenunitnum=5;

indim=1;outdim=1;

rand('state',sum(100*clock))

noisevar=0.1;

noise=noisevar*randn(1,samnum);

samin=8*rand(1,samnum)-4;

samoutnonoise=1.1*(1-samin+2*samin.^2).*exp(-samin.^2/2);

samout=samoutnonoise+noise;

testsamin=-4:

0.08:

4;

testsamout=1.1*(1-testsamin+2*testsamin.^2).*exp(-testsamin.^2/2);

figure

holdon

grid

plot(testsamin,testsamout,'k--')

xlabel('inputx');ylabel('outputy');

maxepochs=30000;

lr=0.003;alpha=0.5;

e0=0.1;

w1=0.1*rand(hiddenunitnum,indim);

b1=0.1*rand(hiddenunitnum,1);

w2=0.1*rand(outdim,hiddenunitnum);

b2=0.1*rand(outdim,1);

w1ex=[w1b1];

w2ex=[w2b2];

dw1ex=zeros(hiddenunitnum,2);

dw2ex=zeros(1,hiddenunitnum+1);

saminex=[samin'ones(samnum,1)]';

errhistory=[];

fori=1:

maxepochs

hiddenout=logsig(w1ex*saminex);

hiddenoutex=[hiddenout'ones(samnum,1)]';

networkout=w2ex*hiddenoutex;

error=samout-networkout;

sse=(sumsqr(error)/samnum)^0.5;

errhistory=[errhistorysse];

ifsse

break;

end

delta2=error;

delta1=w2'*delta2.*hiddenout.*(1-hiddenout);

dw2ex=lr*delta2*hiddenoutex';

dw1ex=lr*delta1*saminex';

w1ex=w1ex+dw1ex;

w2ex=w2ex+dw2ex;

w2=w2ex(:

1:

hiddenunitnum);

end

i

w1=w1ex(:

1)

b1=w1ex(:

2)

w2

b2=w2ex(:

1+hiddenunitnum)

sse

testhiddenout=logsig(w1*testsamin+repmat(b1,1,testsamnum));

testnnout=w2*testhiddenout+repmat(b2,1,testsamnum);

plot(testsamin,testnnout);

figure

holdon

grid

[xx,num]=size(errhistory);

plot(1:

num,errhistory);

运行结果最好时,学习效率=0.005,隐节点数=5:

w1=

0.5816

2.5220

-3.9213

-1.8311

-1.4301

 

b1=

0.7763

5.0958

-1.9469

3.9640

0.8285

 

w2=

0.14202.97872.94582.5186-2.2577

 

b2=

-3.2267

 

sse=

0.1000

 

i=

2907

3.加入动量项的批处理程序:

只需将批处理程序中的

dw2ex=lr*delta2*hiddenoutex';

dw1ex=lr*delta1*saminex';

改为

dw2ex=lr*delta2*hiddenoutex'+dw2ex*alpha;

dw1ex=lr*delta1*saminex'+dw1ex*alpha;

运行结果最好时,学习效率=0.005,隐节点数=7:

w1=

1.2224

0.2118

2.2169

-2.4819

-1.1339

-2.8364

1.6276

 

b1=

0.1389

-0.4904

-4.4112

-5.1026

-0.3769

-1.1383

-1.0608

 

w2=

1.8665-1.1976-2.7362-2.7258-1.89905.19421.9903

 

b2=

-0.3951

 

i=

5227

 

sse=

0.1000

表格1.单样本BP算法平均最小误差

学习效率

隐节点数

0.0001

0.001

0.003

0.005

0.01

0.1

3

0.3187

0.1600

0.1240

0.1140

0.1177

0.1305

5

0.3282

0.1020

0.1030

0.1

0.1

0.1100

7

0.2900

0.1060

0.1

0.1043

0.1

0.1

10

0.3000

0.1

0.1020

0.1075

0.1

0.101

表格2.批处理BP算法平均最小误差

学习效率

隐节点数

0.0001

0.001

0.003

0.005

0.01

0.1

3

0.4023

0.1956

0.1200

0.1436

0.1489

NaN

5

0.4302

0.1024

0.1

0.1

0.4985

NaN

7

0.4752

0.1201

0.1

0.1

0.4714

NaN

10

0.4357

0.1073

0.1010

0.1

0.5642

NaN

表格3.加入动量项的批处理BP算法平均最小误差

学习效率

隐节点数

0.0001

0.001

0.003

0.005

0.01

0.1

3

0.2845

0.1289

0.1162

0.1165

0.1452

NaN

5

0.1899

0.1

0.1

0.1

0.1053

NaN

7

0.2984

0.1

0.1

0.1

0.1002

NaN

10

0.2235

0.1

0.1

0.1082

0.1023

NaN

三.问题回答

1.比较单样本训练和批处理训练的区别;

答:

单样本输入是每输入一个样本就调整一次权值,并计算误差的大小,而对于批处理来说,是等所有的样本都输入以后再调整权值.当样本较多的时候批处理能获得较快的收敛速度.

2.根据结果分析增加动量项后算法的变化

答:

加入动量项后,就等于让权值的收敛方向向着一定的方向进行,由输出的数据可以看出这一点,对于相同的结点数,相同的学习率,加入动量项后,收速度即迭代次数明显的降低.

2改变不同参数的BP网络运行情况及结果,并给予相应的结果分析

答:

改变不同参数,对网络运行情况的影响,可以概括为:

总误差的值有一定的随机性.对于改变网络的学习率,小的学习率会使收敛更稳定一点,但是速度也会相对地慢一点,大的学习率在一定程度上能加快收敛的速度,但是收敛的概率要小得多,很容易发散,所以说,随着学习的增大,迭代的次数会先减小后增大。

大到一定程度进,由于波动太大。

结果就不在收敛.

3思考:

输出层可以采用Sigmoid函数吗?

为什么?

答:

可以,但需要进行变换。

4试验中遇到的问题和解决方法

答:

一开始不理解隐层,没有考虑隐节点个数的变化;后来还不行,因为没加阈值;后来还有很多错,比如矩阵的点乘,初始化···最后终于还是被我搞定哈!

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

当前位置:首页 > 解决方案 > 学习计划

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

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