BP神经网络工具箱代码_第1页
BP神经网络工具箱代码_第2页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

clearallclcinputNums=3;outputNums=3;•hideNums=10;•maxcount=20000;•samplenum=3;•precision=0.001;yyy=1.3;•alpha=0.01;a=0.5;error=zeros(1,maxcount+1);•errorp=zeros(1,samplenum);•v=rand(inputNums,hideNums);deltv=zeros(inputNums,hideNums);dv=zeros(inputNums,hideNums);•w=rand(hideNums,outputNums);•deltw=zeros(hideNums,outputNums);dw=zeros(hideNums,outputNums);•samplelist=[0.1323,0.323,-0.132;0.321,0.2434,0.456;-0.6546,-0.3242,0.3255];expectlist=[0.5435,0.422,-0.642;0.1,0.562,0.5675;-0.6464,-0.756,0.11];count=1;while(count<=maxcount)c=1;while(c<=samplenum)fork=1:outputNumsd(k)=expectlist(c,k);endfori=1:inputNumsx(i)=samplelist(c,i);end%Forward();forj=1:hideNumsnet=0.0;fori=1:inputNumsnet=net+x(i)*v(i,j);%输入层到隐层的加权和工X(i)V(i)endy(j)=1/(1+exp(-net));%输出层处理f(x)=1/(1+exp(-x))单极性sigmiod函数endfork=1:outputNumsnet=0.0;forj=1:hideNumsnet=net+y(j)*w(j,k);endifcount>=2&&error(count)-error(count+1)<=0.0001o(k)=1/(1+exp(-net)/yyy);%平坦区加大学习率elseo(k)=1/(1+exp(-net));%同上endend%BpError(c)反馈/修改;errortmp=0.0;fork=1:outputNumserrortmp=errortmp+(d(k)-o(k))A2;%第一组训练后的误差计算enderrorp(c)=0.5*errortmp;%误差E=E(d(k)-o(k))A2*1/2%end%Backward();fork=1:outputNumsyitao(k)=(d(k)-o(k))*o(k)*(1-o(k));%输入层误差偏导字串5endforj=1:hideNumstem=0.0;fork=1:outputNumstem=tem+yitao(k)*w(j,k);%为了求隐层偏导,而计算的工endyitay(j)=tem*y(j)*(1-y(j));%隐层偏导end%调整各层权值forj=1:hideNumsfork=1:outputNumsdeltw(j,k)=alpha*yitao(k)*y(j);%权值w的调整量deltw(已乘学习率)w(j,k)=w(j,k)+deltw(j,k)+a*dw(j,k);%权值调整,这里的dw=dletw(t-1),实际是对BP算法的一个dw(j,k)=deltw(j,k);%改进措施--增加动量项目的是提高训练速度endendfori=1:inputNumsforj=1:hideNumsdeltv(i,j)=alpha*yitay(j)*x(i);%同上deltwv(i,j)=v(i,j)+deltv(i,j)+a*dv(i,j);dv(i,j)=deltv(i,j);endendc=c+1;end%第二个while结束;表示一次BP训练结束doubletmp;tmp=0.0;字串8fori=1:samplenumtmp=tmp+errorp(i)*errorp(i);%误差求和endtmp=tmp/c;error(count)=sqrt(tmp);%误差求均方根,即精度if(error(count)<precision)%另一个结束条件break;endcount=count+1;%训练次数加1end%第一个while结束error(maxcount+1)=error(maxcount);p=1:count;pp=p/50;plot(pp,error(p),"-");%显示误差然后下面是研友wangleisxcc的程序基础上,我把初始化网络,训练网络,和网络使用三个稍微集成后的一个新函数bpnet%简单的BP神经网络集成,使用时直接调用bpnet就行%输入的是p-作为训练值的输入%t-也是网络的期望输出结果%ynum-设定隐层点数一般取3~20;%maxnum-如果训练一直达不到期望误差之内,那么BP迭代的次数一般设为5000%ex-期望误差,也就是训练一小于这个误差后结束迭代一般设为0.01%lr-学习率一般设为0.01%pp-使用p-t虚拟蓝好的BP网络来分类计算的向量,也就是嵌入二值水印的大组系数进行训练然后得到二值序列%ww-输出结果%注明:ynum,maxnum,ex,lr均是一个值;而p,t,pp,ww均可以为向量字串1%比如p是m*n的n维行向量,t那么为m*k的k维行向量,pp为o*i的i维行向量,ww为o*k的k维行向量%p,t作为网络训练输入,pp作为训练好的网络输入计算,最后的WW作为pp经过训练好的BP训练后的输出functionww=bpnet(p,t,ynum,maxnum,ex,lr,pp)plot(p,t,"+");title("训练向量");xlabel("P");ylabel("t");[w1,b1,w2,b2]=initff(p,ynum,"tansig",t,"purelin");%初始化含一个隐层的BP网络zhen=25;%每迭代多少次更新显示biglr=1.1;%学习慢时学习率(用于跳出平坦区)litlr=0.7;%学习快时学习率(梯度下降过快时)a=0.7%动量项a大小(△W(t)=lr*X*人+a*AW(t-1))tp=[zhenmaxnumexlrbiglrlitlra1.04];%trainbpx[w1,b1,w2,b2,ep,tr]=trainbpx(w1,b1,"tansig",w2,b2,"purelin",p,t,tp);ww=simuff(pp,w1,b1,"tansig",w2,b2,"purelin");%ww就是调用结果下面是bpnet使用简例:%bpnet举例,因为BP网络的权值初始化都是随即生成,所以每次运行的状态可能不一样。%如果初始化的权值有利于训练,那么可能很快能结束训练,反之则反之字串6clearallclcfigurerandn("state",sum(100*clock))num1=5;%隐节点数num2=10000;%最大迭代次数a1=0.02;%期望误差a2=0.05;%学习率test=randn(1,5)*0.5;%随即生成5个测试值in=-1:.1:1;%训练值expout=[-.9602-.5770-.0729.3771.6405.6600.4609.1336-.2013-.4344-.5000-.3930-.1647.0988.3072.3960.3449.1816-.0312-.2189-.3201

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论