⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rbfnet.~jav

📁 用java编写的bp网络和rbf网络的源程序 JNNT由java语言写成
💻 ~JAV
字号:


public class RbfNet extends Object {

  int inNum;  //输入接点数
  int hideNum;//隐含接点数
  int outNum;  //输出接点数
  double c[][];//重心
  double d[];//距离(歪)


  int epochs;

  double x[]; //输入向量
  double x1[];//隐含接点状态值
  double x2[];//输出接点状态值

  double o1[];
  double o2[];
  double w[][];//隐含接点权值
  double w1[][];//输出接点权值
  double rate_w; //权值学习率(输入层-隐含层)
  double rate_w1;//权值学习率 (隐含层-输出层)
  double rate_b1;//隐含层阀值学习率
  double rate_b2;//输出层阀值学习率
  double b1[];//隐含接点阀值
  double b2[];//输出接点阀值
  double pp[];
  double qq[];
  double yd[];
  double e;

  double in_rate;//输入归一化比例系数
  

  public RbfNet(int inNum,int hideNum,int outNum,double p[][]) {

  in_rate=1.0;//输入归一化系数
 /*
  double pmax=0.0;
  for (int isamp=0;isamp<p.length;isamp++){
      for (int i=0;i<inNum;i++)
          {if (Math.abs(p[isamp][i])>pmax)
              pmax=Math.abs(p[isamp][i]);
          }
      }//end for isamp


  in_rate=pmax;

  for (int isamp=0;isamp<p.length;isamp++){
      for (int i=0;i<inNum;i++)
          p[isamp][i]=p[isamp][i]/in_rate;
      }//end for isamp
  */
  LBG lbg=new LBG(p,hideNum);
  c=lbg.getc();
  d=lbg.getd();


  
  this.epochs=500;
  this.inNum=inNum;
  this.hideNum=hideNum;
  this.outNum=outNum;
  x=new double[inNum]; //输入向量
  x1=new double[hideNum];//隐含接点状态值
  x2=new double[outNum];//输出接点状态值

  o1=new double[hideNum];
  o2=new double[outNum];
  w=new double[inNum][hideNum];//隐含接点权值
  w1=new double[hideNum][outNum];//输出接点权值
  b1=new double[hideNum];//隐含接点阀值
  b2=new double[outNum];//输出接点阀值
  pp=new double[hideNum];
  qq=new double[outNum];
  yd=new double[outNum];

  rate_w=0.05;//权值学习率(输入层-隐含层)
  rate_w1=0.05;//权值学习率 (隐含层-输出层)
  rate_b1=0.05;//隐含层阀值学习率
  rate_b2=0.05;//输出层阀值学习率
  e=0.0;

  for(int i=0;i<inNum;i++)
     for(int j=0;j<hideNum;j++)
         w[i][j]=1.0;
  for(int i=0;i<hideNum;i++)
     for(int j=0;j<outNum;j++)
         w1[i][j]=1.0;


  }
  /**********************************/
  /*****BP神经控制器算法训练函数*****/
  public void train(double p[][],double t[][],int samplenum){

  e=0.0;
  for(int isamp=0;isamp<samplenum;isamp++)//循环训练一次样本
  {
  for(int i=0;i<inNum;i++)//构造每个样本的输入和输出标准
    //x[i]=p[isamp][i]/in_rate;
    x[i]=p[isamp][i];
  for(int i=0;i<outNum;i++)
     yd[i]=t[isamp][i];


  for(int j=0;j<hideNum;j++)
   {o1[j]=0.0;
    for(int i=0;i<inNum;i++)
      o1[j]=o1[j]+(w[i][j]*x[i]-c[j][i])*(w[i][j]*x[i]-c[j][i]);
      
      x1[j]=Math.exp(-o1[j]/(2*d[j]*d[j]));
   }


 for(int k=0;k<outNum;k++)
   {o2[k]=0.0;
    for(int j=0;j<hideNum;j++)
      o2[k]=o2[k]+w1[j][k]*x1[j];
    x2[k]=o2[k];
    //System.out.println(String.valueOf(x2[k]));
   }

    //System.out.println("ok1");
 for(int k=0;k<outNum;k++)
   {qq[k]=(yd[k]-x2[k])*x2[k];
   
    e+=Math.abs(yd[k]-x2[k])*Math.abs(yd[k]-x2[k]);//计算均方差
    //System.out.println(String.valueOf(e));
    for(int j=0;j<hideNum;j++)
        if (x1[j]>0.05)
        w1[j][k]=w1[j][k]+rate_w1*qq[k]*x1[j];
    //System.out.println(String.valueOf(x2[0]));
   }



   }//end isamp样本循环

  e=Math.sqrt(e);
 }//end train
 /***************************************/
  /*****BP神经控制器算法模拟计算函数*****/
 public double[] sim(double psim[]){


  for(int i=0;i<inNum;i++)
    //x[i]=psim[i]/in_rate;
    x[i]=psim[i];

  for(int j=0;j<hideNum;j++)
   {o1[j]=0.0;
    for(int i=0;i<inNum;i++)
      o1[j]=o1[j]+(w[i][j]*x[i]-c[j][i])*(w[i][j]*x[i]-c[j][i]);
      x1[j]=Math.exp(-o1[j]/(2*d[j]*d[j]));
   }


 for(int k=0;k<outNum;k++)
   {o2[k]=0.0;
    for(int j=0;j<hideNum;j++)
      o2[k]=o2[k]+w1[j][k]*x1[j];
      x2[k]=o2[k];
   }
 

 return x2;
} //end sim

} //end bp class

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -