神经网络实验报告——BP网络实现对Hermit函数逼近
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验报告
——基于BP网络的多层感知器
电气工程及其自动化四班20080240402 曹建20080240406 邓宏
一、神经网络结构图
O
输出层
隐层
输入层
X0 X
二、程序
1.单样本程序:
function main()
clc
close all
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;
for p=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)
for p=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);
for i=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;
for p=1:Pmax
s2=E(p)^2+s2;
end
e=(s2/Pmax)^0.5;
Erme=[Erme e];
if e<=Emin
break;
end
q=q+1;
end
Erme;
q
x=linspace(-4,4);
for p=1:100
d(p)=1.1*(1-x(p)+2*x(p)^2)*exp((-x(p)^2)/2);
end
for p=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');
hold on;
plot(x,o1,'-.b');
xlabel('Hermit多项式曲线与所构建BP网络输出曲线')
最好的一次运行结果:学习率=0.01,隐节点数=5
q =
2500
0500
1000150020002500
0.2
0.4
0.6
0.8
1
1.2
1.4
误差的收敛曲线
-4
-3
-2-1012
34
Hermit 多项式曲线与所构建BP 网络输出曲线
2.批处理程序:
function main()
clc
close all
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
hold on
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=[w1 b1];
w2ex=[w2 b2];
dw1ex=zeros(hiddenunitnum,2);
dw2ex=zeros(1,hiddenunitnum+1);
saminex=[samin' ones(samnum,1)]';
errhistory=[];
for i=1:maxepochs
hiddenout=logsig(w1ex*saminex);
hiddenoutex=[hiddenout' ones(samnum,1)]';
networkout=w2ex*hiddenoutex;
error=samout-networkout;
sse=(sumsqr(error)/samnum)^0.5;
errhistory=[errhistory sse];
if sse