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

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

神经网络基于BP网络的多层感知器实验报告
二、基于BP网络的多层感知器一:实验目的:
1、理解多层感知器的工作原理
2、通过调节算法参数了解参数的变化对于感知器训练的影响
3、了解多层感知器局限性二:实验原理:BP的基本思想:信号的正向传播误差的反向传播–信号的正向传播:输入样本从输入层传入,经各隐层逐层处理后,传向输出层。

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

1、基本BP算法的多层感知器模型:
2、BP学习算法的推导:当网络输出与期望输出不等时,存在输出误差E将上面的误差定义式展开至隐层,有进一步展开至输入层,有调整权值的原则是使误差不断地减小,因此应使权值的调整量与误差的梯度下降成正比,即η∈(0,1)表示比例系数,在训练中反应学习速率 BP算法属于δ学习规则类,这类算法被称为误差的梯度下降(Gradient Descent)算法。

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

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

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

(要求误差计算使用RME,Emin 设置为0、1)程序如下:function dyb %单样本程序 clc; close all; clear; x0=[1:;-4:0、08:4];%样本个 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,); wucha=0; zhaosheng=0、01*randn(1,);%噪声erro=[]; ERRO=[];%误差,为画收敛曲线准备 Emin=0、1;
d=zeros(1,); for m=1: d(m)=hermit(x(m,2));%期望 end;
o=zeros(1,); j=zeros(1,j); =zeros(1,j); p=1; q=1; azc=0; acs=0; for z=1:5 while q<30000 Erme=0; for p=1:
y=zeros(1,j); for i=1:j j(1,i)=x(p,:)*v(:,i);
y(1,i)=1/(1+exp(-j(1,i))); end; y=[-1 y];
o(p)=w*y'+zhaosheng(p);%噪声 wucha = d(p)-o(p);
err(1,p)=1/2*wucha^2; erro=[erro,wucha]; for m=1:j+1
w(1,m)=w(1,m)+n*wucha*y(1,m); end; for m=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; for t=1:; Erme=Erme+err(1,t); end;
err=zeros(1,); Erme=sqrt(Erme/); ERRO=[ERRO,Erme]; if
Erme<Emin break; end; end; azc=azc+Erme; acs=acs+q; end disp('最终误差:'); pinjunwucha=1/5*azc figure(1);
plot(x(:,2),d,'--r'); hold on; plot(x(:,2),o,'--b'); disp('次数:'); pjcx=1/5*acs figure(2); plot(ERRO); figure(3); plot(x(:,2),d,'--rp');endfunction F =
hermit(x)%hermit子函数 F =
1、1*(1-x+2*x^2)*exp(-x^2/2);end运行结果如下:表格
1、单样本BP算法平均最小误差学习率结点数0、0
50、0
70、
10、1
20、1
50、18
80、096
50、085
90、0195
30、094
50、087
40、0925
100、096
80、094
40、098
30、09200、082
10、09821
20、088
60、085
60、088
50、094
60、083
40、09281
50、091
50、092
70、087
80、092
40、073
80、084
42、实现解决该问题的批处理训练BP网络,调整参数如上。

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

程序如下:function pcl %批处理 close all; clc; x=[-4:0、08:4];%样本个 j=input('请输入隐层节点数 j = ');%隐层节点数
n=input('请输入学习效率 n = ');%学习效率 a=0、1;%动量系数w=rand(1,j); v=rand(1,j); err=zeros(1,); wucha=0;
zhaosheng=0、01*randn(1,);%噪声 erro=[]; ERRO=[];%误差,
为画收敛曲线准备 Emin=0、1; d=zeros(1,); for m=1:
d(1,m)=hermit(x(m));%期望 end; o=zeros(1,); j=zeros(1,j); =zeros(1,j); y=zeros(1,j); p=1; q=1; azc=0; acs=0; for
z=1:5 while q<30000 Erro=0; Erme=0; for p=1: for i=1:j
j(1,i)=v(1,i)*x(1,p); y(1,i)=1/(1+exp(-j(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; for
t=1:; Erro=Erro+erro(t); Erme=Erme+err(1,t); end; erro=[]; for m=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/); ERRO=[ERRO,Erme]; if Erme<Emin break; end; end; azc=azc+Erme; acs=acs+q; end disp('平均误差:'); pjwc=1/5*azc figure(1); plot(x,d,'--r'); hold on;
plot(x,o,'--b'); disp('平均次数:'); pjcs=1/5*acs
figure(2); plot(ERRO); figure(3); plot(x,d);endfunction F = hermit(x)
%hermit子函数 F =
1、1*(1-x+2*x^2)*exp(-x^2/2);end运行结果如下:表格
2、批处理BP算法平均最小误差学习率结点数0、0
50、0
70、
20、1 50、17 50、096 60、097 30、097 40、098 60、099 30、0913 80、097 20、093 30、091 30、097 60、092 20、0915 100、094 50、095 70、093 70、094 80、095 70、08171 20、092
50、091
10、095
20、093
70、091
53、对批处理训练BP算法增加动量项调整参数如上,记录
结果,并与没有带动量项的批处理训练BP算法的结果相比较程序
如下:function jdlx %加动量项 close all; clc; x=[-4:0、08:4];%样本个 j=input('请输入隐层节点数 j = ');%隐层节点
数 n=input('请输入学习效率 n = ');%学习效率 a=0、1;%动量
系数 w=rand(1,j); v=rand(1,j); err=zeros(1,); wucha=0; zhaosheng=0、01*randn(1,);%噪声 erro=[]; ERRO=[];%误差,
为画收敛曲线准备 Emin=0、1; d=zeros(1,); for m=1:
d(1,m)=hermit(x(m));%期望 end; o=zeros(1,); j=zeros(1,j); =zeros(1,j); y=zeros(1,j); p=1; q=1; azc=0; acs=0; for
z=1:5 while q<30000 Erro=0; Erme=0; for p=1: for i=1:j
j(1,i)=v(1,i)*x(1,p); y(1,i)=1/(1+exp(-j(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; for
t=1:; Erro=Erro+erro(t); Erme=Erme+err(1,t); end; erro=[]; for m=1:j; if m==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/); ERRO=[ERRO,Erme]; if Erme<Emin break; end; end; azc=azc+Erme; acs=acs+q; end disp('平均误差:'); pjwc=1/5*azc figure(1); plot(x,d,'--r'); hold on;
plot(x,o,'--b'); disp('平均次数:'); pjcs=1/5*acs
figure(2); plot(ERRO); figure(3); plot(x,d);endfunction F = hermit(x)
%hermit子函数 F =
1、1*(1-x+2*x^2)*exp(-x^2/2);end运行结果如下:
4、对批处理BP算法改变参数:学习率η、迭代次数、隐层节点数,观察算法的收敛发散,以及测试误差的变化(对每个参
数取几个不同参数,分别运行5次,结果取平均值)。

表格
3、加入动量项的批处理BP算法平均最小误差学习率结点数0、0
50、0
70、
10、1
20、1
50、17
50、093
50、094
80、099
10、091
20、098
40、0987
80、098
10、096
70、096
20、098
90、094
10、092
100、089
30、098
20、09200、089
40、092
50、09841
20、085
90、089
60、087
80、095
70、082
50、0946经网络结构图七:实验结果分析:
1、单样本训练:每输入一个样本,都要回传误差并调整权值,会导致收敛速度过慢,
2、批处理(Batch)训练:根据总误差计算各层的误差信号并调整权值,权值的校正值是在整个训练集提交训练后才决定的。

3、加动量项的批处理运算:通过引入以前运算的经验,从而使学习过程振荡减小,改善收敛性。

八:附加函数:(斜黑体部分替换为pcl、dlpcl分别进行批处理BP网络计算、显示图形和增加动量项的批处理BP网络计算、显示图形)计算函数:function
[cs,wc]=jsdyb(lr,q)Emin=0、1;s1=0;s2=0;for k=1:5
[x1,x2]=dyb(lr,Emin,q); s1=s1+x1;
s2=s2+x2;endcs=s1/5;wc=s2/5;function
A=zjsdyb(lr)q=[4,5,7,8,10];format short gA=[];for
zk=1:5[cs,wc]=jsdyb(lr,q(zk));B=[cs,wc];A=[A;B];end图形显示函数:function txdyb(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);for
i=1:100i=x(i)、*Wij+b*Wb;k=0;for t=1:qoi(t)=1/(1+exp(-
i(t)));k=k+Wki(t)*oi(t);end ok(i)=k; end%显示图形;figureplot(x,ok,'r')hold ony=
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曲线')hold offfigureplot(x,ok,'or')hold onx=
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('input x')ylabel('output y')legend('测试样本','训练样本')figureplot([1:length(Ez)],Ez)title('收敛曲线')clc
第 1 页共 1 页。

相关文档
最新文档