您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > BP神经网络算法java实现
BP神经网络算法java实现packagebackp;importjava.*;importjava.awt.*;importjava.io.*;importjava.util.Scanner;//byrealmagicianimportorg.omg.CORBA.portable.InputStream;publicclassbackpro{publicstaticvoidmain(Stringargs[]){Stringfilename=newString(delta.in);try{FileInputStreamfileInputStream=newFileInputStream(filename);ScannersinScanner=newScanner(fileInputStream);intattN,hidN,outN,samN;attN=sinScanner.nextInt();outN=sinScanner.nextInt();hidN=sinScanner.nextInt();samN=sinScanner.nextInt();//System.out.println(attN++outN++hidN++samN);doublesamin[][]=newdouble[samN][attN];doublesamout[][]=newdouble[samN][outN];for(inti=0;isamN;++i){for(intj=0;jattN;++j){samin[i][j]=sinScanner.nextDouble();}for(intj=0;joutN;++j){samout[i][j]=sinScanner.nextDouble();}}inttimes=10000;doublerate=0.5;BP2bp2=newBP2(attN,outN,hidN,samN,times,rate);bp2.train(samin,samout);for(inti=0;ihidN;++i){for(intj=0;jattN;++j)System.out.print(bp2.dw1[i][j]+);System.out.println();}for(inti=0;ioutN;++i){for(intj=0;jhidN;++j)System.out.print(bp2.dw2[i][j]+);System.out.println();}while(true){doubletestout[]=newdouble[outN];doubletestin[]=newdouble[attN];ScannertestinScanner=newScanner(System.in);for(inti=0;iattN;++i){testin[i]=testinScanner.nextDouble();}testout=bp2.getResault(testin);for(inti=0;ioutN;++i)System.out.print(testout[i]+);System.out.println(outN);}}catch(IOExceptione){//TODO:handleexception}System.out.println(End);}}classBP2//包含一个隐含层的神经网络{doubledw1[][],dw2[][];inthidN;//隐含层单元个数intsamN;//学习样例个数intattN;//输入单元个数intoutN;//输出单元个数inttimes;//迭代次数doublerate;//学习速率booleantrained=false;//保证在得结果前,先训练BP2(intattN,intoutN,inthidN,intsamN,inttimes,doublerate){this.attN=attN;this.outN=outN;this.hidN=hidN;this.samN=samN;dw1=newdouble[hidN][attN+1];//每行最后一个是阈值w0for(inti=0;ihidN;++i)//每行代表所有输入到i隐藏单元的权值{for(intj=0;j=attN;++j)dw1[i][j]=Math.random()/2;}dw2=newdouble[outN][hidN+1];//输出层权值,每行最后一个是阈值w0for(inti=0;ioutN;++i)//每行代表所有隐藏单元到i输出单元的权值{for(intj=0;j=hidN;++j)dw2[i][j]=Math.random()/2;}this.times=times;this.rate=rate;}publicvoidtrain(doublesamin[][],doublesamout[][]){doubledis=0;//总体误差intcount=times;doubletemphid[]=newdouble[hidN];doubletempout[]=newdouble[outN];doublewcout[]=newdouble[outN];doublewchid[]=newdouble[hidN];while((count--)0)//迭代训练{dis=0;for(inti=0;isamN;++i)//遍历每个样例samin[i]{for(intj=0;jhidN;++j)//计算每个隐含层单元的结果{temphid[j]=0;for(intk=0;kattN;++k)temphid[j]+=dw1[j][k]*samin[i][k];temphid[j]+=dw1[j][attN];//计算阈值产生的隐含层结果temphid[j]=1.0/(1+Math.exp(-temphid[j]));}for(intj=0;joutN;++j)//计算每个输出层单元的结果{tempout[j]=0;for(intk=0;khidN;++k)tempout[j]+=dw2[j][k]*temphid[k];tempout[j]+=dw2[j][hidN];//计算阈值产生的输出结果tempout[j]=1.0/(1+Math.exp(-tempout[j]));}//计算每个输出单元的误差项for(intj=0;joutN;++j){wcout[j]=tempout[j]*(1-tempout[j])*(samout[i][j]-tempout[j]);dis+=Math.pow((samout[i][j]-tempout[j]),2);}//计算每个隐藏单元的误差项for(intj=0;jhidN;++j){doublewche=0;for(intk=0;koutN;++k)//计算输出项误差和{wche+=wcout[k]*dw2[k][j];}wchid[j]=temphid[j]*(1-temphid[j])*wche;}//改变输出层的权值for(intj=0;joutN;++j){for(intk=0;khidN;++k){dw2[j][k]+=rate*wcout[j]*temphid[k];}dw2[j][hidN]=rate*wcout[j];}//改变隐含层的权值for(intj=0;jhidN;++j){for(intk=0;kattN;++k){dw1[j][k]+=rate*wchid[j]*samin[i][k];}dw1[j][attN]=rate*wchid[j];}}if(dis0.003)break;}trained=true;}publicdouble[]getResault(doublesamin[]){doubletemphid[]=newdouble[hidN];doubletempout[]=newdouble[outN];if(trained==false)returnnull;for(intj=0;jhidN;++j)//计算每个隐含层单元的结果{temphid[j]=0;for(intk=0;kattN;++k)temphid[j]+=dw1[j][k]*samin[k];temphid[j]+=dw1[j][attN];//计算阈值产生的隐含层结果temphid[j]=1.0/(1+Math.exp(-temphid[j]));}for(intj=0;joutN;++j)//计算每个输出层单元的结果{tempout[j]=0;for(intk=0;khidN;++k)tempout[j]+=dw2[j][k]*temphid[k];tempout[j]+=dw2[j][hidN];//计算阈值产生的输出结果tempout[j]=1.0/(1+Math.exp(-tempout[j]));//System.out.print(tempout[j]+);}returntempout;}}
本文标题:BP神经网络算法java实现
链接地址:https://www.777doc.com/doc-4222849 .html