1、doubleo2;/输出层的输入publicdouble,w;/权值矩阵w,这是输入层与隐藏层之间的权值矩阵publicdouble,v;/权值矩阵V,这是隐藏层与输出层之间的权值矩阵publicdouble,dw;/权值矩阵wpublicdouble,dv;/权值矩阵Vpublicdoublerate;/学习率publicdoubleb1;/隐层阈值矩阵publicdoubleb2;/输出层阈值矩阵publicdoubledb1;publicdoubledb2;doublepp;/隐藏层的误差doubleqq;/输出层的误差doubleyd;/输出层的教师数据,所谓教师数据就是实际数据而已!
2、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.inNum=p.GetLength(1);this.outNum=t.G
3、etLength(1);this.hideNum=computeHideNum(inNum,outNum);/this.hideNum=18;this.sampleNum=p.GetLength(0);Console.WriteLine(输入节点数目:+inNum);隐层节点数目:+hideNum);输出层节点数目:+outNum);Console.ReadLine();/将这些矩阵规定好矩阵大小x=newdoubleinNum;x1=newdoublehideNum;x2=newdoubleoutNum;o1=newdoublehideNum;o2=newdoubleoutNum;w=new
4、doubleinNum,hideNum;v=newdoublehideNum,outNum;dw=newdoubleinNum,hideNum;dv=newdoublehideNum,outNum;/阈值b1=newdoublehideNum;b2=newdoubleoutNum;db1=newdoublehideNum;db2=newdoubleoutNum;/误差pp=newdoublehideNum;qq=newdoubleoutNum;yd=newdoubleoutNum;/输出层的教师数据/初始化wfor(inti=0;iinNum;i+)for(intj=0;jhideNum;j+
5、)/NextDouble返回一个介于0.0和1.0之间的随机数。wi,j=(R.NextDouble()*2-1.0)/2;/初始化voutNum;vi,j=(R.NextDouble()*2-1.0)/2;rate=0.8;e=0.0;in_rate=1.0;?/训练函数publicvoidtrain(double,p,double,t)/求p,t中的最大值doublepMax=0.0;/sampleNum为样本总数for(intisamp=0;isamppMax)pMax=Math.Abs(pisamp,i);if(Math.Abs(tisamp,j)pMax=Math.Abs(tisam
6、p,j);in_rate=pMax;/endisamp/数据归一化xi=pisamp,i/in_rate;ydi=tisamp,i/in_rate;/计算隐层的输入和输出o1j=0.0;o1j+=wi,j*xi;/“权值”*“输入”的那个累加的过程/这个b1j就是隐藏层的阈值,阈值就是一个输入为“-1”的累加值x1j=1.0/(1.0+Math.Exp(-o1j-b1j);/计算输出层的输入和输出for(intk=0;k0.001&study50000);Console.Write(bp.saveMatrix(bp.w,w.txtbp.saveMatrix(bp.v,v.txtbp.saveM
7、atrix(bp.b1,b1.txtbp.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.90,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.98,0.99;double,p2=newdouble,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+)aa;p21i=p2n,i;t2=bp.sim(p21);t2.Length;Console.WriteLine(t2i+
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1