基于BP网络实现曲线逼近.docVIP

  1. 1、本文档共9页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
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; %隐含层的修正 w end

文档评论(0)

***** + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档