神经网络实验报告

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

神经网络及应用实验报告院系:电气工程学院

班级:电气工程dsfasd

姓名: dsfa

学号: dfad7

时间: 2009-11-28

实验二基于BP网络的多层感知器

一:实验原理:

BP的基本思想:信号的正向传播误差的反向传播

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

1.基本BP算法的多层感知器模型:

2.BP学习算法的推导:

当网络输出与期望输出不等时,存在输出误差E

将上面的误差定义式展开至隐层,有

进一步展开至输入层,有

调整权值的原则是使误差不断地减小,因此应使权值的调整量与误差的梯度下降成正比,即

η∈(0,1)表示比例系数,在训练中反应学习速率

BP算法属于δ学习规则类,这类算法被称为误差的梯度下降(Gradient Descent)算法。

二:实验内容:

Hermit多项式如下式所示:f(x)=1.1(1-x+2x^2)exp(-x^2/2)

采用BP算法设计一个单输入单输出的多层感知器对该函数进行逼近。

训练样本按以下方法产生:样本数P=100,其中输入样本xi服从区间[-4,4]内的均匀分布,样本输出为F(xi)+ei ,ei为添加的噪声,服从均值为0,标准差

为0.1的正态分布。

隐层采用Sigmoid激活函数f(x)=1/(1+1/e^x),输出层采用线性激活函数

f(x)=x。

注意:输出层采用的线性激活函数,不是Sigmoid激活函数,所以迭代公式需要根据前面的推导过程重新推导。

三:实验步骤:

1. 用Matlab编程,实现解决该问题的单样本训练BP网络,设置一个停止迭代的误差E min和

最大迭代次数。在调试过程中,通过不断调整隐层节点数,学习率η,找到收敛速度快且误差小的一组参数。产生均匀分布在区间[-4,4]的测试样本,输入建立的模型得到输出,与Hermit多项式的期望输出进行比较计算总误差(运行5次,取平均值),并记录下每次迭代结束时的迭代次数。

(要求误差计算使用RME,Emin 设置为0.1)

程序如下:

function danyangben1%建立以danyangben1为文件名的m文件

clc;

close all;

x=[-4:0.08:4];%产生样本

j=input('请输入隐层节点数 j = ');%隐层节点数

n=input('请输入学习效率 n = ');%学习效率

w=rand(1,j);%对权值w赋较小的初值

w0=0.5;%对权值w0赋较小的初值

v=rand(1,j);%对权值V赋较小的初值

v1=rand(1,j);%对权值V1赋较小的初值

x0=-1;%对阈值x0赋初值

y0=-1;%对阈值y0赋初值

err=zeros(1,101);

zhaosheng=0.01*randn(1,101);%噪声

wucha=0;

erro=[];

Erme=0;

yadong=[];

Emin=0.1;

d=zeros(1,101);%以初值0赋给期望输出

for m=1:101

d(1,m)=hermit(x(1,m));%以Hermit多项式产生期望输出

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;

for z=1:5

while q<30000 %设定最大的迭代交数

for p=1:101 %计算隐层的输出

for i=1:j

netj(1,i)=v(1,i)*x(1,p)+v1(1,i)*x0;

y(1,i)=1/(1+exp(-netj(1,i)));

end;

o(1,p)=w*y'+y0*w0+zhaosheng(p);%计算输出并给输出加上上定的扰动 wucha=1/2*(d(1,p)-o(1,p))*(d(1,p)-o(1,p));%计算误差

err(1,p)=wucha;

erro=[erro,wucha];

for m=1:j;%调整各层的权值

w0=w0-n*w0;

w(1,m)=w(1,m)+n*(d(1,p)-o(1,p))*y(1,m);

v(1,m)=v(1,m)+n*(d(1,p)-o(1,p))*w(1,m)*y(1,m)*(1-y(1,m))*x(1,p);

v1(1,m)=v1(1,m)+n*(d(1,p)-o(1,p))*w(1,m)*y(1,m)*(1-y(1,m))*x0;

end;

q=q+1;

end;

Erme=0;

for t=1:101;

Erme=Erme+err(1,t);

end;

err=zeros(1,101);

Erme=sqrt(Erme/101);

yadong=[yadong,Erme];

if Erme

end;

end;%输入结果

azc=azc+Erme;

acs=acs+q;

end

disp('平均误差:');

pjwc=1/5*azc

相关文档
最新文档