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

📄 dh_bp.c

📁 有学习神经网络程序及例子 应用效果良好 实际操作简单 用于多方面研究
💻 C
📖 第 1 页 / 共 2 页
字号:
   }
   do {
   err_curr=0.0;
   for(i=from_snum;i<to_snum;i++){
    forward(i);
    for(m=0;m<nunit[nhlayer+1];m++){
      out = *(outptr[nhlayer+1]+m);
      *(errptr[nhlayer+1]+m)=(target[i][m]-out)
			      *(1-out)*out;
  }
  for(m=nhlayer+1;m>=1;m--){
   for(n=0;n<nunit[m-1]+1;n++){
    *(errptr[m-1]+n)=0.0;
    for(p=0;p<nunit[m];p++){
     offset=(nunit[m-1]+1)*p+n;
     *(delw[m-1]+offset)=eta*(*(errptr[m]+p))
				 *(*(outptr[m-1]+n))
		      +alpha*(*(delw[m-1]+offset));
    *(errptr[m-1]+n) += *(errptr[m]+p)*(*(wtptr[m-1]+offset));
}
    *(errptr[m-1]+n)= *(errptr[m-1]+n)*(1-*(outptr[m-1]+n))
			*(*(outptr[m-1]+n));
}
}
/* weight changes */

for(m=1;m<nhlayer+2;m++){
 for(n=0;n<nunit[m];n++){
  for(p=0;p<nunit[m-1]+1;p++){
  offset=(nunit[m-1]+1)*n+p;
   *(wtptr[m-1]+offset) += *(delw[m-1]+offset);
    }
   }
  }
  ep[i]=0.0;
  for(m=0;m<nunit[nhlayer+1];m++){
   ep[i] += fabs((target[i][m]-*(outptr[nhlayer+1]+m)));
   }
   err_curr +=ep[i]*ep[i];
   }
   err_curr=.5*err_curr/ninput;
   if(fplot10==1)
   fprintf(fp3,"%ld,%2.9f\n",cnt,err_curr);
   cnt++;
   result=introspective(from_snum,to_snum);
   }while(result==CONTNE);
/* update output with changed weights */
 for(i=from_snum;i<to_snum;i++)forward(i);
 for(i=0;i<nhlayer+1;i++){
  index=0;
  for(j=0;j<nunit[i+1];j++)
  {
   printf("\n\nWeights between unit %d of layer %d",
		j,i+1);
   printf("and units of layer %d\n",i);
   for(k=0;k<nunit[i];k++)
    printf("%f",*(wtptr[i]+index++));
    printf("\nThreshold of unit %d of layer %d is %f",
     j,i+1,*(wtptr[i]+index++));
     }
     }
      for(i=0;i<ninput;i++)
	for(j=0;j<noutattr;j++)
	  printf("\n\n sample %d output %d=%ftarget %d=%f",
			i,j,outpt[i][j],j,target[i][j]);
	  printf("\n\nTotal number of iteration is %d",cnt);
	  printf("\nNormalized system error is %f\n\n\n",err_curr);
	  return(result);
	  }


/* read in the input data file specified by user
       during the interactive session */
 user_session()
 {

  int i,j,showdata;
  char fnam[20],dtype[20];
  float max0=-99999.,min0=99999.;
  float max1=-99999.,min1=99999.;
  FILE *fp,*fp00;
 
  fp11=fopen("bp1.ini","r");
 
  printf("\nStart of learning session");
 /* printf("\n\t Enter the task name:");*/
  fscanf(fp11,"%s",task_name);
 /* printf("\n How many features in input pattern?:");*/
  fscanf(fp11,"%d",&ninattr);
 /* printf("\nHow many output units?:");*/
  fscanf(fp11,"%d",&noutattr);
 /* printf("\nTotal number of input sample?:");*/
  fscanf(fp11,"%d",&ninput);
  strcpy(fnam,task_name);
  strcat(fnam,".dat");
  printf("\nInput file name is %s",fnam);
  if((fp=fopen(fnam,"r"))==NULL)
  {
   printf("\nFile %s does not exist",fnam);
   exit(0);
   }
  fclose(fp11);
/*   printf("\n Do you want to look at data just read?");
   printf("\nAnswer yes or no:");
   scanf("%s",dtype);*/

   fp00=fopen("bpmax","w");

    dtype[0]='y';
   showdata=((dtype[0]=='y')||(dtype[0]=='y'));
   for(i=0;i<ninput;i++){
    for(j=0;j<ninattr;j++){
    fscanf(fp,"%f",&input[i][j]);
    if(showdata)printf("%f\n",input[i][j]);
    }

    for(j=0;j<noutattr;j++){
    fscanf(fp,"%f",&target[i][j]);
    if(showdata)printf("%f\n",target[i][j]);
    }
    }
    for(j=0;j<ninattr;j++){
      for(i=0;i<ninput;i++){
           if(input[i][j]>max0) max0=input[i][j];
           if(input[i][j]<min0) min0=input[i][j];
      }  
      for(i=0;i<ninput;i++) input[i][j]=(input[i][j]-min0)/(max0-min0);
      fprintf(fp00,"%f  %f\n",max0,min0);
      max0=-9999.0;
      min0=9999.0;
    }
    for(j=0;j<noutattr;j++){
      for(i=0;i<ninput;i++){
           if(target[i][j]>max1) max1=target[i][j];
           if(target[i][j]<min1) min1=target[i][j]; 
  /*    min1=0.;max1=100.;    */
      }
      for(i=0;i<ninput;i++) target[i][j]=(target[i][j]-min1)/(max1-min1);
      fprintf(fp00,"%f  %f\n",max1,min1);
      max1=-9999.0;
      min1=9999.0;
     }
    if((i=fclose(fp)) != 0)
    {
    printf("\nFile cannot be closed %d",i);
    exit(0);
    }

 /*fp=fopen("bpmax","w");
 fprintf(fp00,"%f %f\n",max1,min1);   */
 fclose(fp00);

}


/* main body of learning */

learning ()
{
int result;
user_session();
set_up();
init();
do {
    initwt();
    result=rumelhart(0,ninput);
    }while(result==RESTRT);
    if(result==FEXIT)
    {
     printf("\nMax number of iterations reached,");
     printf("\nbut failed to decrease system");
     printf("\n error sufficiently");
     }
    dwrite(task_name);
     wtwrite(task_name);
}


/* main body of output generation */
    output_generation()
    {
    int i,m,nsample,id;
 float cw[1000];
    char ans[10];
    char dfile[20];
    char fname[20];
    float max0,min0,max1[10],min1[10],sdep,edep,relv,gr_off;
    FILE *fp,*fp100;
/*    printf("\n Generation of output for a new pattern");
    printf("\n\t Presenttask name is %s",task_name);
    printf("\n\t Work on a different task?");
    printf("\n\tAnswer yes or no:");
    scanf("%s",ans);
    ans[0]='n';
    if((ans[0]=='y') || (ans[0]=='Y'))
    {
    printf("\n\tType the task name:");
    scanf("%s",task_name);
    dread(task_name);
    init();
    wtread(task_name);
    for (i=0;i<10;i++){
    }
    }*/

   fp100=fopen("bp1.ini","r");
    fscanf(fp100,"%s",task_name);
    dread(task_name);
    init();
    wtread(task_name);

   fclose(fp100);


   fp12=fopen("bp2.ini","r");
/* input data for output generation are created */
/*   printf("\n Enter file name for patterns to");
   printf("be processed:");*/
   fscanf(fp12,"%s",dfile);
   if((fp1=fopen(dfile,"r"))==NULL)
   {
   perror("Cannot open file");
   exit(0);
   }
/*   printf("\nEnter number of patterns for processing:");*/
   fscanf(fp12,"%f",&gr_off);
   fscanf(fp12,"%f",&sdep);
   fscanf(fp12,"%f",&edep);
   fscanf(fp12,"%f",&relv);
 /*  fscanf(fp12,"%d",&nsample);    */
   nsample=(int)((edep-sdep)/relv)+1;
   for(i=0;i<nsample;i++)
    for(m=0;m<ninattr+1;m++)
     fscanf(fp1,"%f",&input[i][m]);

  /* for(i=0;i<nsample;i++)
        cw[i]=(100.*input[i][2])/(input[i][1]+input[i][2]);  */

   fp100=fopen("bpmax","r");
     for(m=0;m<ninattr;m++) {
     /* for(i=0;i<nsample;i++) {
           if(input[i][m]>max0) max0=input[i][m];
           if(input[i][m]<min0) min0=input[i][m];
      }    */
      fscanf(fp100,"%f  %f",&max0,&min0);
      if(m==1) gr_off=(gr_off-min0)/(max0-min0);
      for(i=0;i<nsample;i++) input[i][m]=(input[i][m+1]-min0)/(max0-min0);
    } 

/* output generation calculation starts */
/*   printf("\n enter output file name=>");*/
   fscanf(fp12,"%s",fname);
   fclose(fp12);

 /*fp12=fopen("bpmax","r");  */
   for(m=0;m<noutattr;m++) fscanf(fp100,"%f  %f",&max1[m],&min1[m]);
 fclose(fp100);


   if((fp=fopen(fname,"w+"))==NULL)
   {
   printf("connot open file");
   exit(0);
   }
   for(i=0;i<nsample;i++)
   {
    forward(i);      fprintf(fp,"%f  ",sdep+i*relv);
    for(m=0;m<noutattr;m++){
  *(outptr[nhlayer+1]+m)=min1[m]+*(outptr[nhlayer+1]+m)*(max1[m]-min1[m]);
      printf("\n sample %d output %d=%f",
    i,m,*(outptr[nhlayer+1]+m));
      printf("\n");
       if(input[i][1]>gr_off)   *(outptr[nhlayer+1]+m)=0.;
       id=(int)(*(outptr[nhlayer+1]+m));

       fprintf(fp," %d ",id);
  /*      if(input[i][1]>gr_off)   *(outptr[nhlayer+1]+m)=0.;
       fprintf(fp," %5.2f  ",*(outptr[nhlayer+1]+m));   */
      }
         fprintf(fp,"\n");
      }
      printf("\n处理完毕!");
   fclose(fp);
      if((i=fclose(fp1)) != 0)
       printf("\nFile cannot be closed %d",i);
 }
/* ***********MAIN*************** */
main()
{
  char select[20],cont[10];
  strcpy(task_name,"*******");
  do {
   printf("\n 选择学习 L(earning) or 输出 O(utput generation)\n");
  do {
    scanf("%s",select);
    switch(select[0]){
     case'o':
     case'O':
	  output_generation();
	  break;
     case'l':
     case'L':
	  learning();
	  break;
     default:
	  printf("\nanswer learning or output generation");
	  break;
  }
  } while((select[0] != 'o') && (select[0] != 'O')
    &&(select[0] != 'l')&&(select[0] != 'L'));
    printf("\n继续?");
    scanf("%s",cont);
    }while((cont[0]=='y')||(cont[0]=='Y'));
    printf("\n处理完毕.");
    printf("\n 再见");
}







⌨️ 快捷键说明

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