神经网络实验报告BP网络实现对Hermit函数逼近.docx
- 文档编号:9024286
- 上传时间:2023-02-02
- 格式:DOCX
- 页数:17
- 大小:57.48KB
神经网络实验报告BP网络实现对Hermit函数逼近.docx
《神经网络实验报告BP网络实现对Hermit函数逼近.docx》由会员分享,可在线阅读,更多相关《神经网络实验报告BP网络实现对Hermit函数逼近.docx(17页珍藏版)》请在冰豆网上搜索。
神经网络实验报告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试验中遇到的问题和解决方法 答: 一开始不理解隐层,没有考虑隐节点个数的变化;后来还不行,因为没加阈值;后来还有很多错,比如矩阵的点乘,初始化···最后终于还是被我搞定哈!
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 神经网络 实验 报告 BP 网络 实现 Hermit 函数 逼近