bp神经网络详细步骤C实现.docx

上传人:scccc 文档编号:13616438 上传时间:2022-01-20 格式:DOCX 页数:24 大小:11.76KB
返回 下载 相关 举报
bp神经网络详细步骤C实现.docx_第1页
第1页 / 共24页
bp神经网络详细步骤C实现.docx_第2页
第2页 / 共24页
bp神经网络详细步骤C实现.docx_第3页
第3页 / 共24页
bp神经网络详细步骤C实现.docx_第4页
第4页 / 共24页
bp神经网络详细步骤C实现.docx_第5页
第5页 / 共24页
点击查看更多>>
资源描述

《bp神经网络详细步骤C实现.docx》由会员分享,可在线阅读,更多相关《bp神经网络详细步骤C实现.docx(24页珍藏版)》请在三一文库上搜索。

1、usingSystem;using;usingSystem.Linq;usingSystem.Text;usingSystem;usingSystem.IO;usingSystem.Text;namespaceBpANNet(/ /BpNet的摘要说明. / publicclassBpNetpublicintinNum;/ 输入节点数inthideNum;/隐层节点数publicintoutNum;/输出层节点数publicintsampleNum;/ 样本总数RandomR;doublex;/输入节点的输入数据doublex1;/隐层节点的输出doublex2;/输出节点的输出doubleo

2、1;/隐层的输入doubleo2;/输出层的输入publicdouble,w;/权值矩阵w,这是输入层与隐藏层之间的权值矩阵publicdouble,v;/权值矩阵V,这是隐藏层与输出层之间的权值矩阵publicdouble,dw;/ 权值矩阵 wpublicdouble,dv;/ 权值矩阵 Vpublicdoublerate;/ 学习率publicdoubleb1;/ 隐层阈值矩阵publicdoubleb2;/输出层阈值矩阵publicdoubledb1;/ 隐层阈值矩阵publicdoubledb2;/输出层阈值矩阵doublepp;/隐藏层的误差doubleqq;/输出层的误差doub

3、leyd;输出层的教师数据,所谓教师数据就是实际数据而B! |publicdoublee;/ 均方误差doublein_rate;/归一化比例系数用于确定隐藏层的神经细胞数publicintcomputeHideNum(intm,intn)(doubles=Math.Sqrt(0.43*m*n+0.12*n*n+2.54*m+0.77*n+0.35) +0.51;intss=Convert.ToInt32(s);return(s -(double)ss)0.5)?ss+1:ss;publicBpNet(double,p,double,t)(构造函数逻辑R=newRandom();this.in

4、Num=p.GetLength(1);this.outNum=t.GetLength(1);this.hideNum=computeHideNum(inNum,outNum);/this.hideNum=18;this.sampleNum=p.GetLength(0);Console.WriteLine(输入节点数目:+inNum);Console.WriteLine(隐层节点数目:+hideNum);Console.WriteLine(输出层节点数目:+outNum);Console.ReadLine();将这些矩阵规定好矩阵大小x=newdoubleinNum;x1=newdoublehi

5、deNum;x2=newdoubleoutNum;o1=newdoublehideNum;o2=newdoubleoutNum;w=newdoubleinNum,hideNum;/ 权值矩阵 w,这是输入层与隐藏层之间的权值矩阵v=newdoublehideNum,outNum;dw=newdoubleinNum,hideNum;dv=newdoublehideNum,outNum;阈值b2=newdoubleoutNum;db1=newdoublehideNum;db2=newdoubleoutNum;误差pp=newdoublehideNum;/ 隐藏层的误差qq=newdoubleout

6、Num;/ 输出层的误差yd=newdoubleoutNum;/输出层的教师数据初始化wfor(inti=0;iinNum;i+)for(intj=0;jhideNum;j+)/NextDouble返回一个介于0.0和1.0之间的随机数。wi,j=(R.NextDouble()*2-1.0)/2;)初始化vfor(inti=0;ihideNum;i+)for(intj=0;joutNum;j+)vi,j=(R.NextDouble()*2-1.0)/2;)rate=0.8;e=0.0;in_rate=1.0;?)训练函数publicvoidtrain(double,p,double,t)e=0

7、.0;求p, t中的最大值doublepMax=0.0;/sampleNum为样本总数for(intisamp=0;isampsampleNum;isamp+)(/inNum是输入层的节点数(即神经细胞数)for(inti=0;ipMax)(pMax=Math.Abs(pisamp,i);for(intj=0;jpMax)(pMax=Math.Abs(tisamp,j);in_rate=pMax;/endisamp for(intisamp=0;isampsampleNum;isamp+)(数据归一化for(inti=0;iinNum;i+)(xi=pisamp,i/in_rate;for(i

8、nti=0;ioutNum;i+)(ydi=tisamp,i/in_rate;计算隐层的输入和输出for(intj=0;jhideNum;j+)(o1j=0.0;for(inti=0;iinNum;i+)(o1j+=wi,j*xi;/权值”输入”的那个累加的过程)这个b1j就是隐藏层的阈值,阈值就是一个输入为-1”的累加值x1j=1.0/(1.0+Math.Exp(-o1j-b1j);)计算输出层的输入和输出for(intk=0;koutNum;k+)(o2k=0.0;for(intj=0;jhideNum;j+)(o2k+=vj,k*x1j;)x2k=1.0/(1.0+Math.Exp(-o

9、2k-b2k);)计算输出层误差和均方差for(intk=0;koutNum;k+)(/ydk是输出层的教师数据,所谓教师数据就是实际应该输出的数据而已qqk=(ydk-x2k)*x2k*(1.0-x2k);e+=(ydk-x2k)*(ydk-x2k);更新V, V矩阵是隐藏层与输出层之间的权值for(intj=0;jhideNum;j+)(vj,k+=rate*qqk*x1j;计算隐层误差for(intj=0;jhideNum;j+)(/PP矩阵是隐藏层的误差ppj=0.0;算法参考我的视频截图for(intk=0;koutNum;k+)(ppj+=qqk*vj,k;)ppj=ppj*x1j

10、*(1-x1j);更新Wfor(inti=0;iinNum;i+)(wi,j+=rate*ppj*xi;)更新b2,输出层的阈值for(intk=0;koutNum;k+)(b2k+=rate*qqk;)更新b1 ,隐藏层的阈值for(intj=0;jhideNum;j+)(b1j+=rate*ppj;)/endisampe=Math.Sqrt(e);/ 均方差/adjustWV(w,dw);/adjustWV(v,dv);/endtrainpublicvoidadjustWV(double,w,double,dw)for(inti=0;iw.GetLength(0);i+)for(intj=

11、0;jw.GetLength(1);j+)wi,j+=dwi,j;publicvoidadjustWV(doublew,doubledw)(for(inti=0;iw.Length;i+)(wi+=dwi;数据仿真函数publicdoublesim(doublepsim)(for(inti=0;iinNum;i+)xi=psimi/in_rate;/in_rate为归一化系数for(intj=0;jhideNum;j+)(o1j=0.0;for(inti=0;iinNum;i+) o1j=o1j+wi,j*xi;x1j=1.0/(1.0+Math.Exp( -o1j -b1j);)for(in

12、tk=0;koutNum;k+)o2k=0.0;for(intj=0;jhideNum;j+)o2k=o2k+vj,k*x1j;x2k=1.0/(1.0+Math.Exp( -o2k -b2k);x2k=in_rate*x2k;)?returnx2;/endsim保存矩阵w,vpublicvoidsaveMatrix(double,w,stringfilename)StreamWritersw=File.CreateText(filename);for(inti=0;iw.GetLength(0);i+)(for(intj=0;jw.GetLength(1);j+)(sw.Write(wi,j

13、+);)sw.WriteLine();)sw.Close();)保存矩阵b1,b2publicvoidsaveMatrix(doubleb,stringfilename)(StreamWritersw=File.CreateText(filename);for(inti=0;ib.Length;i+)(sw.Write(bi+);)sw.Close();)读取矩阵 W,VpublicvoidreadMatrixW(double,w,stringfilename)(StreamReadersr;try?(sr=newStreamReader(filename,Encoding.GetEncodi

14、ng(gb23 12);?Stringline;inti=0;while(line=sr.ReadLine()!=null)?(strings1=line.Trim().Split();for(intj=0;js1.Length;j+)(wi,j=Convert.ToDouble(s1j);)i+;)sr.Close();)catch(Exceptione)?(/Lettheuserknowwhatwentwrong.Console.WriteLine(Thefilecouldnotberead:);Console.WriteLine(e.Message);)读取矩阵b1,b2publicvo

15、idreadMatrixB(doubleb,stringfilename)(StreamReadersr;try?sr=newStreamReader(filename,Encoding.GetEncoding(gb23 12);?Stringline;inti=0;?while(line=sr.ReadLine()!=null)?bi=Convert.ToDouble(line);i+;sr.Close();catch(Exceptione)?/Lettheuserknowwhatwentwrong.Console.WriteLine(Thefilecouldnotberead:);Cons

16、ole.WriteLine(e.Message);?/endbpnet/endnamespace主调用程序namespaceBpANNet(/Classi的摘要说明。/classClassl(/应用程序的主入口点。/STAThreadstaticvoidMain(stringargs)(/0.1399,0.1467,0.1567,0.1595,0.1588,0.1622,0.1611,0.1615,0.1685,0.1789,0.1790/double,p1=newdouble,0.05,0.02,0.09,0.11,0.12,0.20, 0.15,0.22,0.20,0.25,0.75,0.

17、75,0.80,0.83,0.82,0.80,0.9 0,0.89,0.95,0.89,0.09,0.04,0.1,0.1,0.14,0.21,0.18,0.24, 0.22,0.28,0.77,0.78,0.79,0.81,0.84,0.82,0.94,0.93,0.9 8,0.99;/double,t1=newdouble,1,0,1,0,1,0,1,0,1,0,0,1,0, 1,0,1,0,1,0,1,1,0,1,0,1,0,1,0,1,0,0,1,0,1,0,1, 0,1,0,1;/p1是输入的信息,一共5组,输入层为六个节点,p156 double,p1=newdouble,0.13

18、99,0.1467,0.1567,0.1595,0.1588,0.1622, 0.1467,0.1567,0.1595,0.1588,0.1622,0.1611, 0.1567,0.1595,0.1588,0.1622,0.1611,0.1615, 0.1595,0.1588,0.1622,0.1611,0.1615,0.1685, 0.1588,0.1622,0.1611,0.1615,0.1685,0.1789;/t1是输出信息,一共 6组,t161 double,t1=newdouble,0.1622,0.1611,0.1615,0.1685,0.1789,0.1790;BpNetbp=

19、newBpNet(p1,t1);intstudy=0;dostudy+;bp.train(p1,t1);bp.rate=0.95 -(0.95 -0.3)*study/50000;/Console.Write(第+study+次学习:);Console.WriteLine(均方差为+bp.e);while(bp.e0.001&study50000);Console.Write(第+study+次学习:);Console.WriteLine(均方差为+bp.e);bp.saveMatrix(bp.w,w.txt);bp.saveMatrix(bp.v,v.txt); bp.saveMatrix(

20、bp.b1,b1.txt);bp.saveMatrix(bp.b2,b2.txt);/double,p2=newdouble,0.05,0.02,0.09,0.11,0.12,0.20, 0.15,0.22,0.20,0.25,0.75,0.75,0.80,0.83,0.82,0.80,0.9 0,0.89,0.95,0.89,0.09,0.04,0.1,0.1,0.14,0.21,0.18,0.24, 0.22,0.28,0.77,0.78,0.79,0.81,0.84,0.82,0.94,0.93,0.9 8,0.99;double,p2=newdouble,0.1399,0.1467,0

21、.1567,0.1595,0.1588,0.1622, 0.1622,0.1611,0.1615,0.1685,0.1789,0.1790;intaa=bp.inNum;intbb=bp.outNum;intcc=p2.GetLength(0);doublep21=newdoubleaa;doublet2=newdoublebb;for(intn=0;ncc;n+)for(inti=0;iaa;i+)p21i=p2n,i;)t2=bp.sim(p21);for(inti=0;it2.Length;i+)(Console.WriteLine(t2i+);)Console.ReadLine();)?

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1