神经网络基于BP网络的多层感知器实验报告.docx
- 文档编号:10884521
- 上传时间:2023-02-23
- 格式:DOCX
- 页数:22
- 大小:192.39KB
神经网络基于BP网络的多层感知器实验报告.docx
《神经网络基于BP网络的多层感知器实验报告.docx》由会员分享,可在线阅读,更多相关《神经网络基于BP网络的多层感知器实验报告.docx(22页珍藏版)》请在冰豆网上搜索。
神经网络基于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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 神经网络 基于 BP 网络 多层 感知 实验 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)