bp神经网络进行多项式函数的逼近 吐血推荐1

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

1神经网络及应用实验报告院系:电气工程学院班级:adf3班姓名:adsf学号:20sdf2实验二、基于BP网络的多层感知器一:实验目的:1.理解多层感知器的工作原理2.通过调节算法参数了解参数的变化对于感知器训练的影响3.了解多层感知器局限性二:实验原理:BP的基本思想:信号的正向传播误差的反向传播–信号的正向传播:输入样本从输入层传入,经各隐层逐层处理后,传向输出层。–误差的反向传播:将输入误差以某种形式通过隐层向输入层逐层反传,并将误差分摊给各层的所有单元,从而获得各层单元的误差信号来作为修正各单元权值的依据。1.基本BP算法的多层感知器模型:32.BP学习算法的推导:当网络输出与期望输出不等时,存在输出误差E将上面的误差定义式展开至隐层,有进一步展开至输入层,有调整权值的原则是使误差不断地减小,因此应使权值的调整量与误差的梯度下降成正比,即η∈(0,1)表示比例系数,在训练中反应学习速率BP算法属于δ学习规则类,这类算法被称为误差的梯度下降(GradientDescent)算法。三:实验内容:Hermit多项式如下式所示:f(x)=1.1(1-x+2x^2)exp(-x^2/2)4采用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网络,设置一个停止迭代的误差Emin和最大迭代次数。在调试过程中,通过不断调整隐层节点数,学习率η,找到收敛速度快且误差小的一组参数。产生均匀分布在区间[-4,4]的测试样本,输入建立的模型得到输出,与Hermit多项式的期望输出进行比较计算总误差(运行5次,取平均值),并记录下每次迭代结束时的迭代次数。(要求误差计算使用RME,Emin设置为0.1)2.实现解决该问题的批处理训练BP网络,调整参数如上。产生均匀分布在区间[-4,4]的测试样本,输入建立的模型得到输出,与Hermit多项式的期望输出进行比较计算总误差(运行5次,取平均值),并记录下每次迭代结束时的迭代次数。3.对批处理训练BP算法增加动量项ΔW(t)=ηδX+αΔW(t-1),α∈(0,1),调整参数如上,记录结果,并与没有带动量项的批处理训练BP算法的结果相比较。4.对批处理BP算法改变参数:学习率η、迭代次数、隐层节点数,观察算法的收敛发散,以及测试误差的变化(对每个参数取几个不同参数,分别运行5次,结果取平均值)。五:实验程序:5(一):单样本训练BP网络function[epoch,s,Wki,Wij,Wb,Ez]=dyb(lr,Emin,q)%初始化;%lr学习效率;Emin为期望误差最小值;q为隐含层节点数;b=1;sum=0;Ez=[];max_epoch=30000;%max_epoch训练的最大次数;%提供训练集和目标值;x=8.*rand(1,100)-4;y=1.1.*(1-x+2.*x.^2).*exp(-x.^2/2)+0.1*rand(1,100);%初始化Wki,Wij;Wij=rand(1,q);Wki=rand(1,q);Wb=rand(1,q);forepoch=1:max_epochE=0;m=1;oi=0;ok=0;%置隐含层和输出层各神经元输出初值为零;form=1:100%计算隐含层各神经元输出;NETi=x(m)*Wij+b*Wb;fort=1:qoi(t)=1/(1+exp(-NETi(t)));end%计算输出层各神经元输出;NETk=Wki*oi';ok=NETk;%计算误差;E=E+(y(m)-ok)^2;%调整输出层加权系数;deltak=y(m)-ok;Wki=Wki+lr*deltak*oi;%调整隐含层加权系数;deltai=oi.*(1-oi).*(deltak*Wki);6Wij=Wij+lr.*deltai.*x(m);Wb=Wb+lr.*deltai;endEz(epoch)=sqrt(E/100);ifEz(epoch)Eminbreak;endend%计算测试输出;x=linspace(-4,4,100);%给定输入:y=1.1.*(1-x+2.*x.^2).*exp(-x.^2/2)+0.1*rand(1,100);fori=1:100NETi=x(i).*Wij+b*Wb;NETk=0;fort=1:qoi(t)=1/(1+exp(-NETi(t)));NETk=NETk+Wki(t)*oi(t);endok(i)=NETk;sum=sum+(y(i)-ok(i))^2;%输出总误差;ends=sqrt(sum/100);(二):批处理训练BP网络function[epoch,s,Wki,Wij,Wb,Ez]=pcl(lr,Emin,q)%初始化;%lr学习效率;Emin为期望误差最小值;q为隐含层节点数;b=1;sum=0;Ez=[];max_epoch=30000;%max_epoch训练的最大次数;%提供训练集和目标值;7x=8.*rand(1,100)-4;y=1.1.*(1-x+2.*x.^2).*exp(-x.^2/2)+0.1*rand(1,100);%初始化Wki,Wij;Wij=rand(1,q);Wki=rand(1,q);Wb=rand(1,q);forepoch=1:max_epochE=0;m=1;cWki=0;cWij=0;cWb=0;%置隐含层和输出层各神经元输出初值为零;form=1:100%计算隐含层各神经元输出;NETi=x(m)*Wij+b*Wb;fort=1:qoi(t)=1/(1+exp(-NETi(t)));end%计算输出层各神经元输出;NETk=Wki*oi';ok=NETk;%计算误差;E=E+(y(m)-ok)^2;%累加输出层加权系数;deltak=y(m)-ok;Wki=Wki+lr*deltak*oi;cWki=cWki+deltak*oi;%累加隐含层加权系数;deltai=oi.*(1-oi).*(deltak*Wki);Wij=Wij+lr.*deltai.*x(m);Wb=Wb+lr.*deltai;cWij=cWij+deltai.*x(m);cWb=cWb+deltai;end8%调整输出层加权系数;Wki=Wki+lr/100*cWki;%调整隐含层加权系数;Wij=Wij+lr/100.*cWij;Wb=Wb+lr/100.*cWb;%判断误差;Ez(epoch)=sqrt(E/100);ifEz(epoch)Eminbreak;endend%计算测试输出;x=linspace(-4,4,100);%给定输入:y=1.1.*(1-x+2.*x.^2).*exp(-x.^2/2)+0.1*rand(1,100);fori=1:100NETi=x(i).*Wij+b*Wb;NETk=0;fort=1:qoi(t)=1/(1+exp(-NETi(t)));NETk=NETk+Wki(t)*oi(t);endok(i)=NETk;sum=sum+(y(i)-ok(i))^2;%输出总误差;ends=sqrt(sum/100);(三):增加动量项的批处理训练BP网络function[epoch,s,Wki,Wij,Wb,Ez]=dlpcl(lr,Emin,q)%初始化;9%lr学习效率;Emin为期望误差最小值;q为隐含层节点数;b=1;g=0;h=0;n=rand(1,1);sum=0;Ez=[];max_epoch=30000;%max_epoch训练的最大次数;%提供训练集和目标值;x=8.*rand(1,100)-4;y=1.1.*(1-x+2.*x.^2).*exp(-x.^2/2)+0.1*rand(1,100);%初始化Wki,Wij;Wij=rand(1,q);Wki=rand(1,q);Wb=rand(1,q);forepoch=1:max_epochE=0;m=1;cWki=0;cWij=0;cWb=0;%置隐含层和输出层各神经元输出初值为零;form=1:100%计算隐含层各神经元输出;NETi=x(m)*Wij+b*Wb;fort=1:qoi(t)=1/(1+exp(-NETi(t)));end%计算输出层各神经元输出;NETk=Wki*oi';ok=NETk;%计算误差;E=E+(y(m)-ok)^2;%累加输出层加权系数;deltak=y(m)-ok;Wki=Wki+lr*deltak*oi;cWki=cWki+deltak*oi;%累加隐含层加权系数;deltai=oi.*(1-oi).*(deltak*Wki);Wij=Wij+lr.*deltai.*x(m);10Wb=Wb+lr.*deltai;cWij=cWij+deltai.*x(m);cWb=cWb+deltai;end%调整输出层加权系数;Wki=Wki+lr/100*cWki+n*g;g=lr/100*cWki+n*g;%调整隐含层加权系数;Wij=Wij+lr/100.*cWij+n*h;h=lr/100.*cWij+n*h;Wb=Wb+lr/100.*cWb;Ez(epoch)=sqrt(E/100);ifEz(epoch)Eminbreak;endend%计算测试输出;x=linspace(-4,4,100);%给定输入:y=1.1.*(1-x+2.*x.^2).*exp(-x.^2/2)+0.1*rand(1,100);fori=1:100NETi=x(i).*Wij+b*Wb;NETk=0;fort=1:qoi(t)=1/(1+exp(-NETi(t)));NETk=NETk+Wki(t)*oi(t);endok(i)=NETk;sum=sum+(y(i)-ok(i))^2;%输出总误差;ends=sqrt(sum/100);11六:实验数据及处理:最大迭代次数:30000,停止迭代的误差:0.1。(一):单样本训练BP网络单样本BP算法平均最小误差及其迭代次数:学习率η隐节点数0.0010.0030.0050.010.050.10.24误差0.100720.10490.10570.103070.103160.0990580.1612次数10303.44206.43763.61386.21272756.218085.65误差0.100930.100770.105550.108570.104820.0944830.1539次数9099.444962588.41555174.8189.66184.47误差0.100850.100570.113770.0992480.102230.102530.1145次数8986.82897.41685.4975.4194.8156.4146.88误差0.11160.109770.104810.10730.112060.0920190.2688次数11382.63627.22198.4738264.412012076.610误差0.112020.110330.101150.106310.111690.0969261.1678次数11819.43560.21885.6912204.2124.6657712由以上实验数据可知:学习效率为0.1,隐节点数为10时收敛速度快且误差比较小。曲线图为:-4-3-2-101234-0.500.511.522.53训练样本与测试样本inputxoutputy测试样本训练样本-4-3-2-101234-0.500.511.522.53Hermit多

1 / 20
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功