神经网络实验报告——BP网络实现对Hermit函数逼近

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

相关文档
最新文档