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

📄 bpnn.txt

📁 bp神经网络变形预测源程序(有待改进),很短的一段代码
💻 TXT
字号:
bp神经网络变形预测源程序(有待改进)
/*********************************************************bp神经网络变形预测源程序*/
#include<stdlib.h>
#include<stdio.h>
#include<math.h>
#include<string.h>
#include<CONIO.H>
#define DN 30 /*Number of Neural net cells*/
#define DM 100 /*Number of Samples*/
#define DL 50 /*Output frequency*/
#define LP 0.125f /*Learning rate*/
/**********************************f1 is logsig function ; f3 is pureline function;*/
float f1(float x)/*************************************定义两个隐层的单元传递函数f1*/
      {return (float)(1/(1+exp(-x)));
      }
float df1(float x)/*********************************************定义函数f1的导数df1*/
      {float tp;
       tp=(float)exp(-x);
       return tp/((1+tp)*(1+tp));
      }
float f3(float x)/***************************定义输出层单元的传递函数f3(线性函数)*/
      {return x;
      }
float df3(float x)/*******************************************定义函数f3的导函数df3*/
      {return 1.0*x/x;
      }
/***********************************************************************************/
main()
{
 int i,j,s0,s1,s2,s3,k,n,Key,jj,n0;
 float E,arfa,gama,err,err0;
 float pp[DN][DM],tt[DN][DM],tt0[DN],ee[DN];
 float aa0[DN],aa1[DN],aa2[DN],aa3[DN],ss1[DN],ss2[DN],ss3[DN],nn1[DN],nn2[DN],nn3[DN];
 float bb1[DN],bb2[DN],bb3[DN],dbb10[DN],dbb20[DN],dbb30[DN],dbb1[DN],dbb2[DN],dbb3[DN];
 float ww1[DN][DN],ww2[DN][DN],ww3[DN][DN];
 float dww1[DN][DN],dww2[DN][DN],dww3[DN][DN];
 float dww10[DN][DN],dww20[DN][DN],dww30[DN][DN]; 
 char DataFile[10],*Fout1,*Fout2,*Fss,*Fss1;
 FILE *fp0,*fp1;
 err0=5.0f;E=(float)6e-3;arfa=LP;gama=0.45f;
/**************************************************************以上为所需参数的定义*/
 printf("\n************\n Input the dat file \n");
 scanf("%s",DataFile);
 Fout1=strdup(DataFile);
 Fout2=strdup(DataFile);
 Fss="-r.txt";
 Fss1="-w.txt";
 strcat(Fout1,Fss);
 strcat(Fout2,Fss1);
 if((fp0=fopen(Fout1,"r"))==NULL)
   {printf("Can't open 1file\n");
    exit(0);
   }
 /*Fout1=strdup(DataFile);*/
 /*Fss="-w.txt";*/
 /*strcat(Fout1,Fss);*/
 if((fp1=fopen(Fout2,"w"))==NULL)
   {printf("Can't open 2file\n");
    exit(0);
   }
 fscanf(fp0,"%d",&Key);
 /***************************************************************if(Key==0)training*/
 if(Key==0)
   {fscanf(fp0,"%d%d%d%d%d%d",&n0,&n,&s0,&s1,&s2,&s3);
    for(jj=0;jj<n;jj++)
       {
        for(i=0;i<s0;i++)
           {
           fscanf(fp0,"%d",&pp[i][jj]);/*pp[][] is Input Sample*/
           }
        for(i=0;i<s3;i++)
           {
           fscanf(fp0,"%d",&tt[i][jj]);/*tt[][] is target Sample*/
           }
        n=n0;
       }
/******************************************************Initial WW & BB within (0,1)*/
 RenewS1:;
 for(i=0;i<s1;i++)
    {bb1[i]=rand()/32767.0f;
     for(j=0;j<s0;j++)
        {ww1[i][j]=rand()/32767.0f;
        }
    }
 for(i=0;i<s2;i++)
    {bb2[i]=rand()/32767.0f;
     for(j=0;j<s1;j++)
        {ww2[i][j]=rand()/32767.0f;
        }
    }
 for(i=0;i<s3;i++)
    {bb3[i]=rand()/32767.0f;
     for(j=0;j<s2;j++)
        {ww3[i][j]=rand()/32767.0f;
        }
    } 
 for(i=0;i<s1;i++)
    {dbb10[i]=0.0f;
     for(j=0;j<s0;j++)
        {dww10[i][j]=0.0f;
        }
    }
 for(i=0;i<s2;i++)
    {dbb20[i]=0.0f;
     for(j=0;j<s1;j++)
        {dww20[i][j]=0.0f;
        }
    }
 for(i=0;i<s3;i++)
    {dbb30[i]=0.0f;
     for(j=0;j<s2;j++)
        {dww30[i][j]=0.0f;
        }
    }
/************************************************************************************/
 k=0;
 while(1)
      {
       for(jj=0;jj<n;jj++)
          {
           for(i=0;i<s0;i++)
              {
               aa0[i]=pp[i][jj];
              }
           for(i=0;i<s3;i++)
              {
               tt0[i]=tt[i][jj];
              }
           }
/*******************************************************Prepropagating aa0[] to aa3[]*/
 for(i=0;i<s1;i++)
    {
     nn1[i]=0.0f;
     for(j=0;j<s0;j++)
        {
  nn1[i]=nn1[i]+ww1[i][j]*aa0[j];
        }
    }
 for(i=0;i<s1;i++)
    {
     nn1[i]=nn1[i]+bb1[i];
     aa1[i]=f1(nn1[i]);
    }
 for(i=0;i<s2;i++)
    {
     nn2[i]=0.0f;
     for(j=0;j<s1;j++)
        {
         nn2[i]=nn2[i]+ww2[i][j]*aa1[j];
        }
    }
 for(i=0;i<s2;i++)
    {
     nn2[i]=nn2[i]+bb2[i];
     aa2[i]=f1(nn2[i]);
    }
 for(i=0;i<s3;i++)
    {
     nn3[i]=0.0f;
     for(j=0;j<s2;j++)
        {
         nn3[i]=nn3[i]+ww3[i][j]*aa2[j];
        }
    }
 for(i=0;i<s3;i++)
    {
     nn3[i]=nn3[i]+bb3[i];
     aa3[i]=f3(nn3[i]);
     ee[i]=tt0[i]-aa3[i];
    }
/****************************************************************************************/
 err=0.0f;
 for(i=0;i<s3;i++)
    {
     if(err<(float)fabs(ee[i]))
       err=(float)fabs(ee[i]);
    }
/*************************************************************Calculating sensitivity ss */
 for(i=0;i<s3;i++)
    {
     ss3[i]=(-2)*df3(nn3[i])*ee[i];
    }
 for(j=0;j<s2;j++)
    {
     ss2[j]=0;
     for(i=0;i<s3;i++)
        {
         ss2[j]=ss2[j]+df1(nn2[j])*ww3[i][j]*ss3[i];
        }
     }
 for(j=0;j<s1;j++)
    {
     ss1[j]=0;
     for(i=0;i<s2;i++)
        {
         ss1[j]=ss1[j]+df1(nn1[j])*ww2[i][j]*ss2[i];
        }
     }
/*******************************************Calculate dww & dbb and Renew the ww &bb */
 for(i=0;i<s1;i++)
    {
     for(j=0;j<s0;j++)
        {
         dww1[i][j]=gama*dww10[i][j]-(1-gama)*arfa*ss1[i]*aa0[j];
         }
     }
 for(i=0;i<s2;i++)
    {
     for(j=0;j<s1;j++)
        {
         dww2[i][j]=gama*dww20[i][j]-(1-gama)*arfa*ss2[i]*aa1[j];
         }
     }
 for(i=0;i<s3;i++)
    {
     for(j=0;j<s2;j++)
        {
         dww3[i][j]=gama*dww30[i][j]-(1-gama)*arfa*ss3[i]*aa2[j];
         }
     }
 for(i=0;i<s1;i++)
    {
     dbb1[i]=gama*dbb10[i]-(1-gama)*arfa*ss1[i];
    }
 for(i=0;i<s2;i++)
    {
     dbb2[i]=gama*dbb20[i]-(1-gama)*arfa*ss2[i];
    }
 for(i=0;i<s3;i++)
    {
     dbb3[i]=gama*dbb30[i]-(1-gama)*arfa*ss3[i];
    }
 for(i=0;i<s1;i++)
    {
     for(j=0;j<s0;j++)
        {
         ww1[i][j]=ww1[i][j]+dww1[i][j];
         dww10[i][j]=dww1[i][j];
        }
    }
 for(i=0;i<s2;i++)
    {
     for(j=0;j<s1;j++)
        {
         ww2[i][j]=ww2[i][j]+dww2[i][j];
         dww20[i][j]=dww2[i][j];
        }
    } 
 for(i=0;i<s3;i++)
    {
     for(j=0;j<s2;j++)
        {
         ww3[i][j]=ww3[i][j]+dww3[i][j];
         dww30[i][j]=dww3[i][j];
        }
    }
 for(i=0;i<s1;i++)
    {
     bb1[i]=bb1[i]+dbb1[i];
     dbb10[i]=dbb1[i];
    }
 for(i=0;i<s2;i++)
    {
     bb2[i]=bb2[i]+dbb2[i];
     dbb20[i]=dbb2[i];
    }
 for(i=0;i<s3;i++)
    {
     bb3[i]=bb3[i]+dbb3[i];
     dbb30[i]=dbb3[i];
    }
 }
 k++;/************************************************************end of for(jj=0;jj<n;jj++)*/
/********************************************************************************************/
 if(k%DL==0)
   {
    fprintf(fp1,"\n%d%f",k/DL,err);
    printf("\nstep=%d err=%10.7f arfa=%6.4f gama=%6.4f s1=%d s2=%d",k/DL,err,arfa,gama,s1,s2);
   }
 if(err>0.02||arfa>LP)
   {
    arfa=LP;
   }
 if(arfa>0.8*LP)
   {
    if(err0/err<1.0)
      {
       arfa=arfa*1.0001f;
      }
    if(err0/err>1.0)
      {
      
王者之风(845746318) 23:08:20
arfa=arfa*0.9999f;
      }
 if(k>3e4*DL&&err>E)
   {
    k=0;
    s1++;
    goto RenewS1;
   }
 if(err<E)
   {
    err0=err;/**********************************************************end of if(k%DL=0)*/
   /* break;*/
   }
  }/********************************************************************end of while(1)*/
/***********************************************************************Output The WW & BB*/
 fprintf(fp1,"\n\n%d%d%d%d%d",s0,s1,s2,s3,k);
 fprintf(fp1,"\n\n");
 for(j=0;j<s1;j++)
    {
     fprintf(fp1,"\n");
     for(i=0;i<s0;i++)
        {
  fprintf(fp1,"%f",ww1[j][i]);
 }
     fprintf(fp1,"%f",bb1[j]);
    }
 fprintf(fp1,"\n\n");
 for(j=0;j<s2;j++)
    {
     fprintf(fp1,"\n");
     for(i=0;i<s1;i++)
        {
  fprintf(fp1,"%f",ww2[j][i]);
 }
     fprintf(fp1,"%f",bb2[j]);
    }
 fprintf(fp1,"\n\n");
 for(j=0;j<s3;j++)
    {
     fprintf(fp1,"\n");
     for(i=0;i<s2;i++)
        {
  fprintf(fp1,"%f",ww3[j][i]);
 }
     fprintf(fp1,"%f",bb3[j]);
    }
  fprintf(fp1,"\n\n");/********************************************************if(Key==0)*/
/******************************************************************************Forcasting*/
/******************************************************************************if(Key==1) Input ww & bb*/
 if(Key==1)
   {
    fscanf(fp0,"%d%d%d%d",&s0,&s1,&s2,&s3);
    for(j=0;j<s1;j++)
       {
        for(i=0;i<s0;i++)
           {
            fscanf(fp0,"%f",&ww1[j][i]);
            fscanf(fp0,"%f",&bb1[j]);
           }
       }
    for(j=0;j<s2;j++)
       {
        for(i=0;i<s1;i++)
           {
            fscanf(fp0,"%f",&ww2[j][i]);
            fscanf(fp0,"%f",&bb2[j]);
           }
       }
    for(j=0;j<s3;j++)
       {
        for(i=0;i<s2;i++)
           {
            fscanf(fp0,"%f",&ww3[j][i]);
            fscanf(fp0,"%f",&bb3[j]);
           }
       }
/***********************************************************if(Key==1)*/
 fscanf(fp0,"%d",&n);
 for(jj=0;jj<n;jj++)
    {
     for(i=0;i<s0;i++)
        {
         fscanf(fp0,"%f",&pp[i][jj]);
        }
    }
 for(jj=0;jj<n;jj++)
    {
     for(i=0;i<s0;i++)
        {
  aa0[i]=pp[i][jj];
        }
     for(i=0;i<s1;i++)
        {
         nn1[i]=0.0f;
         for(j=0;j<s0;j++)
            {
             nn1[i]=nn1[i]+ww1[i][j]*aa0[j];
            }
        }
    }
 for(i=0;i<s1;i++)
    {
     nn1[i]=nn1[i]+bb1[i];
     aa1[i]=f1(nn1[i]);
    }
 for(i=0;i<s2;i++)
    {
     nn2[i]=0.0f;
         for(j=0;j<s1;j++)
            {
             nn2[i]=nn2[i]+ww2[i][j]*aa1[j];
            }
    }
 for(i=0;i<s2;i++)
    {
     nn2[i]=nn2[i]+bb2[i];
     aa2[i]=f1(nn2[i]);
    }
 for(i=0;i<s3;i++)
    {
     nn3[i]=0.0f;
         for(j=0;j<s2;j++)
            {
             nn3[i]=nn3[i]+ww3[i][j]*aa2[j];
            }
    }
 for(i=0;i<s3;i++)
    {
     nn3[i]=nn3[i]+bb3[i];
     aa3[i]=f3(nn3[i]);
    }
/********************************************************************************/
 fprintf(fp1,"\n");
 for(i=0;i<s3;i++)
    {
    fprintf(fp1,"%f",aa3[i]);
    }
 fclose(fp0);
 fclose(fp1);
 return 0;
 }
}
} 

⌨️ 快捷键说明

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