BP网络实现曲线逼近.docVIP

  • 13
  • 0
  • 约 9页
  • 2016-12-26 发布于天津
  • 举报
BP网络实现曲线逼近 班级:自动化1班 学号:S080305001 姓名:陈 洪 霞 一、BP网络学习原理 多次前馈网络中,第一层为输入层,第Q层为输出层,中间各层为隐层,神经处理单元的特征函数是。 BP网络的学习过程是由正向传播和误差反向传播组成,把输入样本从输入层传到隐含层单元,经隐含层单元逐层处理后产生一个输出,至输出层,这个过程为正向传播,如果输出层没有得到所期望的输入值,把期望值和输出值的误差信号按原路径返回,并通过修改各层神经元的连接权值,使误差信号为最小。这个过程为反向传播。 第一层为输入层,第Q层为输出层,中间为隐含层,如图1.1。设第q层的神经元个数为nq,输入到第q层的第i个神经元的连接权系数为(i=1,2,…,nq-1) ( , ) 图1.1 神经元网络 设给定P组输入输出样本, 设定拟合误差的代价函数为 采用一阶梯度法调节连接权系数E最小。 最后归纳出BP网络的学习算法如下: , 二、用BP算法拟合正弦曲线 在本实验中选取的学习曲线为,学习的样本点为21个,输入的样本点:,样本点的输出为 ,输入层为单输入x,输出层为单输出y,中间隐含层为一层,十个神经元。输入层的权值是不可调节,所以在这里不做考虑。隐含层权值变量设为w1,输出层权值变量设为w2。在编程时设定网络的学习结束可以通过限定学习的次数,在学习的次数达到后停止学习,也可以根据学习后的输入和理想值的误差实现网络想学习的结束。这两种方法各有各的优缺点,前者可以要网络在一定的时间内学习结束,但是有可能学习次数相对太少,学习的效果不是最佳,既是没有学习好,输出的误差有可能很大。也有可能学习的次数相对太多了,最后的学习几乎没什么变化,只是循环。输入几乎没变化。后者根据学习输出和理想值输出的误差来实现循环。优点是它能够在学习达到一定的要求后自动跳出循环,这样可以达到规定的要求。也节省学习的时间,但是当误差或者学习率设定的不合理时会出现死循环。需要增添其他代码使之跳出。本文编程采用第一种方法,限定学习次数1000。学习1000后自动跳出停止学习。学习率设定为0.1。代码编写简要流程如图1.2。 图1.2 BP算法程序框图 代码如下: c=1; d=1; sample=zeros(21,1); for p=0:0.001:1 y(c)=(sin(p*pi*2)+1)/2; if mod(p,0.05)==0 sample(d,1)=y(c); d=d+1; end c=c+1; end w1=rand(21,10); w2=rand(21,10); out1=zeros(21,10); out2=zeros(21,1); s1=zeros(21,10); s2=zeros(21,1); vv2=zeros(21,1); vv1=zeros(21,10); dd2=zeros(21,10); dd1=zeros(21,10); d=1; sum=zeros(1001,1); e=1; for u=1:1000 hold off d=1; for i=0:0.05:1 for j=1:10 s1(d,j)=i*w1(d,j); out1(d,j)=1/(exp((-1)*s1(d,j))+1); %第一层第j个神经元输出 end temp =0; for k=1:10 temp = temp+out1(d,k)*w2(d,k); end s2(d,1) = temp; out2(d,1)=1/(exp((-1)*s2(d,1))+1); %第二层神经元输出 vv2(d,1)=out2(d,1)*(1-out2(d,1))*(sample(d,1)-out2(d,1)); %输出层的d for b=1:10 dd2(d,b)=0.1*vv2(d,1)*out1(d,b); %输出层的修正 w vv1(d,b)=vv2(d,1)*w2(d,b)*out1(d,b)*(1.00-out1(d,b)); dd1(d,b)=0.1*vv1(d,b)*i; %隐含层的

文档评论(0)

1亿VIP精品文档

相关文档