BP算法 java实现.doc_第1页
BP算法 java实现.doc_第2页
BP算法 java实现.doc_第3页
BP算法 java实现.doc_第4页
免费预览已结束,剩余1页可下载查看

下载本文档

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

文档简介

package backp;import java.*;import java.awt.*;import java.io.*;import java.util.Scanner;/by realmagicianimport org.omg.CORBA.portable.InputStream;public class backpro public static void main(String args)String filename=new String(delta.in);try FileInputStream fileInputStream=new FileInputStream(filename);Scanner sinScanner=new Scanner(fileInputStream);int attN,hidN,outN,samN;attN=sinScanner.nextInt();outN=sinScanner.nextInt();hidN=sinScanner.nextInt();samN=sinScanner.nextInt();/System.out.println(attN+ +outN+ +hidN+ +samN);double samin=new doublesamNattN;double samout=new doublesamNoutN;for(int i=0;isamN;+i)for(int j=0;jattN;+j)saminij=sinScanner.nextDouble();for(int j=0;joutN;+j)samoutij=sinScanner.nextDouble();int times=10000;double rate=0.5;BP2 bp2=new BP2(attN,outN,hidN,samN,times,rate);bp2.train(samin, samout);for(int i=0;ihidN;+i)for(int j=0;jattN;+j)System.out.print(bp2.dw1ij+ );System.out.println();for(int i=0;ioutN;+i)for(int j=0;jhidN;+j)System.out.print(bp2.dw2ij+ );System.out.println();while(true)double testout=new doubleoutN;double testin=new doubleattN;Scanner testinScanner=new Scanner(System.in);for(int i=0;iattN;+i)testini=testinScanner.nextDouble();testout=bp2.getResault(testin);for(int i=0;ioutN;+i)System.out.print(testouti+ );System.out.println(outN); catch (IOException e) / TODO: handle exceptionSystem.out.println(End);class BP2/包含一个隐含层的神经网络double dw1,dw2;int hidN;/隐含层单元个数int samN;/学习样例个数int attN;/输入单元个数int outN;/输出单元个数int times;/迭代次数double rate;/学习速率boolean trained=false;/保证在得结果前,先训练BP2(int attN,int outN,int hidN,int samN,int times,double rate)this.attN=attN;this.outN=outN;this.hidN=hidN;this.samN=samN;dw1=new doublehidNattN+1;/每行最后一个是阈值w0for(int i=0;ihidN;+i)/每行代表所有输入到i隐藏单元的权值for(int j=0;j=attN;+j)dw1ij=Math.random()/2;dw2=new doubleoutNhidN+1;/输出层权值,每行最后一个是阈值w0for(int i=0;ioutN;+i)/每行代表所有隐藏单元到i输出单元的权值for(int j=0;j0)/迭代训练dis=0;for(int i=0;isamN;+i)/遍历每个样例 saminifor(int j=0;jhidN;+j)/计算每个隐含层单元的结果temphidj=0;for(int k=0;kattN;+k)temphidj+=dw1jk*saminik;temphidj+=dw1jattN;/计算阈值产生的隐含层结果temphidj=1.0/(1+Math.exp(-temphidj );for(int j=0;joutN;+j)/计算每个输出层单元的结果tempoutj=0;for(int k=0;khidN;+k)tempoutj+=dw2jk*temphidk;tempoutj+=dw2jhidN;/计算阈值产生的输出结果tempoutj=1.0/(1+Math.exp( -tempoutj );/计算每个输出单元的误差项for(int j=0;joutN;+j)wcoutj=tempoutj*(1-tempoutj)*(samoutij-tempoutj);dis+=Math.pow(samoutij-tempoutj),2);/计算每个隐藏单元的误差项for(int j=0;jhidN;+j)double wche=0;for(int k=0;koutN;+k)/计算输出项误差和wche+=wcoutk*dw2kj;wchidj=temphidj*(1-temphidj)*wche;/改变输出层的权值for(int j=0;joutN;+j)for(int k=0;khidN;+k)dw2jk+=rate*wcoutj*temphidk;dw2jhidN=rate*wcoutj;/改变隐含层的权值for(int j=0;jhidN;+j)for(int k=0;kattN;+k)dw1jk+=rate*wchidj*saminik;dw1jattN=rate*wchidj;if(dis0.003)break;trained=true;public double getResault(double samin)double temphid=new doublehidN;double tempout=new doubleoutN;if(trained=false)return null;for(int j=0;jhidN;+j)/计算每个隐含层单元的结果temphidj=0;for(int k=0;kattN;+k)temphidj+=dw1jk*samink;temphidj+=dw1jattN;/计算阈值产生的隐含层结果temphidj=1.0/(1+Math.exp(-temphidj );for(int j=0;joutN;+j)/计算每个输出层单元的结果tempoutj=0

温馨提示

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

评论

0/150

提交评论