神经网络基于BP网络的多层感知器实验报告.docx

上传人:b****9 文档编号:23420922 上传时间:2023-05-16 格式:DOCX 页数:22 大小:200.40KB
下载 相关 举报
神经网络基于BP网络的多层感知器实验报告.docx_第1页
第1页 / 共22页
神经网络基于BP网络的多层感知器实验报告.docx_第2页
第2页 / 共22页
神经网络基于BP网络的多层感知器实验报告.docx_第3页
第3页 / 共22页
神经网络基于BP网络的多层感知器实验报告.docx_第4页
第4页 / 共22页
神经网络基于BP网络的多层感知器实验报告.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

神经网络基于BP网络的多层感知器实验报告.docx

《神经网络基于BP网络的多层感知器实验报告.docx》由会员分享,可在线阅读,更多相关《神经网络基于BP网络的多层感知器实验报告.docx(22页珍藏版)》请在冰豆网上搜索。

神经网络基于BP网络的多层感知器实验报告.docx

神经网络基于BP网络的多层感知器实验报告

 

神经网络及应用实验报告

实验二、基于BP网络的多层感知器

一:

实验目的:

1.理解多层感知器的工作原理

2.通过调节算法参数了解参数的变化对于感知器训练的影响

3.了解多层感知器局限性

二:

实验原理:

BP的基本思想:

信号的正向传播误差的反向传播

–信号的正向传播:

输入样本从输入层传入,经各隐层逐层处理后,传向输出层。

–误差的反向传播:

将输入误差以某种形式通过隐层向输入层逐层反传,并将误差分摊给各层的所有单元,从而获得各层单元的误差信号来作为修正各单元权值的依据。

1.基本BP算法的多层感知器模型:

2.BP学习算法的推导:

当网络输出与期望输出不等时,存在输出误差E

将上面的误差定义式展开至隐层,有

进一步展开至输入层,有

调整权值的原则是使误差不断地减小,因此应使权值的调整量与误差的梯度下降成正比,即

η∈(0,1)表示比例系数,在训练中反应学习速率

BP算法属于δ学习规则类,这类算法被称为误差的梯度下降(GradientDescent)算法。

<实验步骤>

1.用Matlab编程,实现解决该问题的单样本训练BP网络,设置一个停止迭代的误差Emin和最大迭代次数。

在调试过程中,通过不断调整隐层节点数,学习率η,找到收敛速度快且误差小的一组参数。

产生均匀分布在区间[-4,4]的测试样本,输入建立的模型得到输出,与Hermit多项式的期望输出进行比较计算总误差(运行5次,取平均值),并记录下每次迭代结束时的迭代次数。

(要求误差计算使用RME,Emin设置为0.1)

程序如下:

functiondyb%单样本程序

clc;

closeall;

clear;

x0=[1:

101;-4:

0.08:

4];%样本101个

x0(1,:

)=-1;

x=x0';

yuzhi=0.1;%阈值

j=input('请输入隐层节点数j=');%隐层节点数

n=input('请输入学习效率n=');%学习效率

w=rand(1,j);

w=[yuzhi,w];%输出层阈值

v=rand(2,j);

v(1,:

)=yuzhi;%隐层阈值

err=zeros(1,101);

wucha=0;

zhaosheng=0.01*randn(1,101);%噪声

erro=[];

ERRO=[];%误差,为画收敛曲线准备

Emin=0.1;

d=zeros(1,101);

form=1:

101

d(m)=hermit(x(m,2));%期望

end;

o=zeros(1,101);

netj=zeros(1,j);

net=zeros(1,j);

p=1;

q=1;

azc=0;

acs=0;

forz=1:

5

whileq<30000

Erme=0;

forp=1:

101

y=zeros(1,j);

fori=1:

j

netj(1,i)=x(p,:

)*v(:

i);

y(1,i)=1/(1+exp(-netj(1,i)));

end;

y=[-1y];

o(p)=w*y'+zhaosheng(p);%噪声

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

err(1,p)=1/2*wucha^2;

erro=[erro,wucha];

form=1:

j+1

w(1,m)=w(1,m)+n*wucha*y(1,m);

end;

form=1:

j

v(:

m)=v(:

m)+n*wucha*w(1,m)*y(1,m)*(1-y(1,m))*x(p,:

)';

end

q=q+1;

end;

fort=1:

101;

Erme=Erme+err(1,t);

end;

err=zeros(1,101);

Erme=sqrt(Erme/101);

ERRO=[ERRO,Erme];

ifErme

end;

end;

azc=azc+Erme;

acs=acs+q;

end

disp('最终误差:

');

pinjunwucha=1/5*azc

figure

(1);

plot(x(:

2),d,'--r');

holdon;

plot(x(:

2),o,'--b');

disp('次数:

');

pjcx=1/5*acs

figure

(2);

plot(ERRO);

figure(3);

plot(x(:

2),d,'--rp');

end

functionF=hermit(x)%hermit子函数

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

end

运行结果如下:

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

 

0.05

0.07

0.1

0.12

0.15

0.18

8

0.0965

0.0859

0.01953

0.0945

0.0874

0.0925

10

0.0968

0.0944

0.0983

0.0920

0.0821

0.0982

12

0.0886

0.0856

0.0885

0.0946

0.0834

0.0928

15

0.0915

0.0927

0.0878

0.0924

0.0738

0.0844

 

2.实现解决该问题的批处理训练BP网络,调整参数如上。

产生均匀分布在区间[-4,4]的测试样本,输入建立的模型得到输出,与Hermit多项式的期望输出进行比较计算总误差(运行5次,取平均值),并记录下每次迭代结束时的迭代次数。

程序如下:

functionpcl%批处理

closeall;

clc;

x=[-4:

0.08:

4];%样本101个

j=input('请输入隐层节点数j=');%隐层节点数

n=input('请输入学习效率n=');%学习效率

a=0.1;%动量系数

w=rand(1,j);

v=rand(1,j);

err=zeros(1,101);

wucha=0;

zhaosheng=0.01*randn(1,101);%噪声

erro=[];

ERRO=[];%误差,为画收敛曲线准备

Emin=0.1;

d=zeros(1,101);

form=1:

101

d(1,m)=hermit(x(m));%期望

end;

o=zeros(1,101);

netj=zeros(1,j);

net=zeros(1,j);

y=zeros(1,j);

p=1;

q=1;

azc=0;

acs=0;

forz=1:

5

whileq<30000

Erro=0;

Erme=0;

forp=1:

101

fori=1:

j

netj(1,i)=v(1,i)*x(1,p);

y(1,i)=1/(1+exp(-netj(1,i)));

end;

o(1,p)=w*y'+zhaosheng(p);%噪声

wucha=d(1,p)-o(1,p);%误差

err(1,p)=1/2*wucha^2;

erro=[erro,wucha];

q=q+1;

end;

fort=1:

101;

Erro=Erro+erro(t);

Erme=Erme+err(1,t);

end;

erro=[];

form=1:

j;

w(1,m)=w(1,m)+n*Erro*y(1,m);

v(1,m)=v(1,m)+n*Erro*w(1,m)*y(1,m)*(1-y(1,m))*x(1,p);

end;

Erme=sqrt(Erme/101);

ERRO=[ERRO,Erme];

ifErme

end;

end;

azc=azc+Erme;

acs=acs+q;

end

disp('平均误差:

');

pjwc=1/5*azc

figure

(1);

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

holdon;

plot(x,o,'--b');

disp('平均次数:

');

pjcs=1/5*acs

figure

(2);

plot(ERRO);

figure(3);

plot(x,d);

end

functionF=hermit(x)%hermit子函数

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

end

运行结果如下:

 

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

0.05

0.07

0.1

0.12

0.15

0.17

5

0.0966

0.0973

0.0974

0.0986

0.0993

0.0913

8

0.0972

0.0933

0.0913

0.0976

0.0922

0.0915

10

0.0945

0.0957

0.0937

0.0948

0.0957

0.0817

12

0.0925

0.9225

0.0911

0.0952

0.0937

0.0915

 

3.对批处理训练BP算法增加动量项

调整参数如上,记录结果,并与没有带动量项的批处理训练BP算法的结果相比较

程序如下:

functionjdlx%加动量项

closeall;

clc;

x=[-4:

0.08:

4];%样本101个

j=input('请输入隐层节点数j=');%隐层节点数

n=input('请输入学习效率n=');%学习效率

a=0.1;%动量系数

w=rand(1,j);

v=rand(1,j);

err=zeros(1,101);

wucha=0;

zhaosheng=0.01*randn(1,101);%噪声

erro=[];

ERRO=[];%误差,为画收敛曲线准备

Emin=0.1;

d=zeros(1,101);

form=1:

101

d(1,m)=hermit(x(m));%期望

end;

o=zeros(1,101);

netj=zeros(1,j);

net=zeros(1,j);

y=zeros(1,j);

p=1;

q=1;

azc=0;

acs=0;

forz=1:

5

whileq<30000

Erro=0;

Erme=0;

forp=1:

101

fori=1:

j

netj(1,i)=v(1,i)*x(1,p);

y(1,i)=1/(1+exp(-netj(1,i)));

end;

o(1,p)=w*y'+zhaosheng(p);%噪声

wucha=d(1,p)-o(1,p);%误差

err(1,p)=1/2*wucha^2;

erro=[erro,wucha];

q=q+1;

end;

fort=1:

101;

Erro=Erro+erro(t);

Erme=Erme+err(1,t);

end;

erro=[];

form=1:

j;

ifm==1

w(1,m)=w(1,m)+n*Erro*y(1,m);

else

w(1,m)=w(1,m)+n*Erro*y(1,m)+a*w(1,m-1);

end

v(1,m)=v(1,m)+n*Erro*w(1,m)*y(1,m)*(1-y(1,m))*x(1,p);

end;

Erme=sqrt(Erme/101);

ERRO=[ERRO,Erme];

ifErme

end;

end;

azc=azc+Erme;

acs=acs+q;

end

disp('平均误差:

');

pjwc=1/5*azc

figure

(1);

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

holdon;

plot(x,o,'--b');

disp('平均次数:

');

pjcs=1/5*acs

figure

(2);

plot(ERRO);

figure(3);

plot(x,d);

end

functionF=hermit(x)%hermit子函数

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

end

运行结果如下:

4.对批处理BP算法改变参数:

学习率η、迭代次数、隐层节点数,观察算法的收敛发散,以及测试误差的变化(对每个参数取几个不同参数,分别运行5次,结果取平均值)。

 

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

 

0.05

0.07

0.1

0.12

0.15

0.17

5

0.0935

0.0948

0.0991

0.0912

0.0984

0.0987

8

0.0981

0.0967

0.0962

0.0989

0.0941

0.092

10

0.0893

0.0982

0.0920

0.0894

0.0925

0.0984

12

0.0859

0.0896

0.0878

0.0957

0.0825

0.0946

经网络结构图

 

七:

实验结果分析:

1、单样本训练:

每输入一个样本,都要回传误差并调整权值,会导致收敛速度过慢,

2、批处理(Batch)训练:

根据总误差

计算各层的误差信号并调整权值,权值的校正值是在整个训练集提交训练后才决定的。

3、加动量项的批处理运算:

通过引入以前运算的经验,从而使学习过程振荡减小,改善收敛性。

八:

附加函数:

(斜黑体部分替换为pcl、dlpcl分别进行批处理BP网络计算、显示图形和增加动量项的批处理BP网络计算、显示图形)

计算函数:

function[cs,wc]=jsdyb(lr,q)

Emin=0.1;s1=0;s2=0;

fork=1:

5

[x1,x2]=dyb(lr,Emin,q);

s1=s1+x1;

s2=s2+x2;

end

cs=s1/5;

wc=s2/5;

functionA=zjsdyb(lr)

q=[4,5,7,8,10];

formatshortg

A=[];

forzk=1:

5

[cs,wc]=jsdyb(lr,q(zk));

B=[cs,wc];

A=[A;B];

end

图形显示函数:

functiontxdyb(lr,q)

%计算测试输出;

Emin=0.1;b=1;

[epoch,s,Wki,Wij,Wb,Ez]=dyb(lr,Emin,q)

x=linspace(-4,4,100);%给定输入:

y=1.1.*(1-x+2.*x.^2).*exp(-x.^2/2)+0.1*rand(1,100);

fori=1:

100

NETi=x(i).*Wij+b*Wb;NETk=0;

fort=1:

q

oi(t)=1/(1+exp(-NETi(t)));

NETk=NETk+Wki(t)*oi(t);

end

ok(i)=NETk;

end

%显示图形;

figure

plot(x,ok,'r')

holdon

y=1.1.*(1-x+2.*x.^2).*exp(-x.^2/2)+0.1*rand(1,100);

plot(x,y,'b')

title('Hermit多项式曲线与BP网络输出曲线')

legend('BP曲线','Hermit曲线')

holdoff

figure

plot(x,ok,'or')

holdon

x=8.*rand(1,100)-4;

y=1.1.*(1-x+2.*x.^2).*exp(-x.^2/2)+0.1*rand(1,100);

plot(x,y,'*k')

title('训练样本与测试样本')

xlabel('inputx')

ylabel('outputy')

legend('测试样本','训练样本')

figure

plot([1:

length(Ez)],Ez)

title('收敛曲线')

clc

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

当前位置:首页 > 初中教育 > 英语

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

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