亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? main.cpp

?? 神經(jīng)網(wǎng)絡(luò)算法的C語言實(shí)現(xiàn)
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
#include <stdlib.h> 

#include <string.h> 

#include <math.h> 

#include <time.h>

#include <iostream>

#define PI 3.14159

#define EPSILON 1E-6 


//3層的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu) 
typedef struct tag_bpnnt 
{ 
  int in_n;     //輸入層神經(jīng)元數(shù) 

  int hidd_n;    //隱層神經(jīng)元數(shù) 

  int out_n;      //輸出層神經(jīng)元 

  double *in_unit; //輸入層神經(jīng)元 

  double *hidd_unit; //隱層神經(jīng)元 

  double *out_unit; //輸出層神經(jīng)元 



  double *hidd_delta;//隱層誤差 

  double *out_delta; //輸出層誤差 

  double *hidd_dfda; 

  double *out_dfda; 

  double *target;   //目標(biāo)向量 

  double **in_w;     //輸入層權(quán)值 

  double **hidd_w; //隱層權(quán)值 



  //前一次結(jié)果(用于迭代) 

  double **prev_in_w; 

  double **prev_hidd_w; 

}BPNN_t; 



//分配1d內(nèi)存 

double *bpnn_malloc1d(int n); 


//分配2d內(nèi)存 

double **bpnn_malloc2d(int m,int n); 



//銷毀2d內(nèi)存 

void bpnn_mfree2d(double **pmem,int m); 



//計(jì)算sigmoid函數(shù) 

double sigmoid(double x); 



//建立神經(jīng)網(wǎng)絡(luò) 

BPNN_t *bpnn_create(int nIn,int nHidden,int nOut); 

//銷毀網(wǎng)絡(luò) 

void bpnn_destroy(BPNN_t *pNet); 



//初始化權(quán)值 

void bpnn_init_weight(double **w,int m,int n,int flag); 



//前向計(jì)算本層輸出 

void bpnn_layerforward(double *layer1,double *layer2,double **conn,int n1,int n2); 



//計(jì)算輸出層反傳誤差 

void bpnn_out_error(double *delta,double *dfda,double *target,double *output,int nj,double *err); 



//計(jì)算隱層反傳誤差 

void bpnn_hidd_error(double *delta_h,double *delta_o,double *dfda_h,double *dfda_o,int nh,int nout,double **w_ho,double *h_unit,double*err);
 


//計(jì)算整個(gè)網(wǎng)絡(luò)輸出 

void bpnn_nnforward(BPNN_t *pNet); 



//最速下降法訓(xùn)練一次 

double bpnn_train_steepest(BPNN_t *pNet,double eta,double **indata,double **targetdata,int np); 



//Levenberg-Marquardt訓(xùn)練 

double bpnn_train_lm(BPNN_t *pNet,double **indata,double **targetdata,int np,double *lamda); 



//gauss-jordan消元法解線性方程組 

void gauss_jordan(double *a,double *b,int n); 



//交換 

void SWAP(double x,double y) 
{
	if((x)!=(y)) 

	{ 
		x=x+y; 

		y=x-y; 

		x=x-y;
	}
}



//設(shè)置單位矩陣 

static void SetEye(double*mat,int n); 



//分配1d內(nèi)存 

double *bpnn_malloc1d(int n) 

{ 

    double *pout; 

    pout=(double*)malloc(n*sizeof(double)); 

    return pout; 

} 



//分配2d內(nèi)存 

//m為行數(shù)(組數(shù)),n為列數(shù)(每組個(gè)數(shù)) 

double **bpnn_malloc2d(int m,int n) 

{ 

    double **pout; 

    int i; 



    pout=(double**)malloc(m*sizeof(double*)); 

    for(i=0;i<m;i++) 

    { 

        pout[i]=(double*)malloc(n*sizeof(double)); 

	} 

    return pout; 

} 



//銷毀2d內(nèi)存 

void bpnn_mfree2d(double **pmem,int m) 

{ 

    int i; 

    for(i=0;i<m;i++) 

    { 

        free(pmem[i]); 

    } 

    free(pmem); 

    pmem=NULL; 

} 



/**////////////////////////////////////////////////////////////////////// 

//初始化權(quán)值 

// 參數(shù) 



//       flag-- 1隨機(jī)初始化 0 全部清0[Page] 

//  m--上一層神經(jīng)元數(shù)目 

//  n--下一層神經(jīng)元數(shù)目 

/**///////////////////////////////////////////////////////////////////// 

void bpnn_init_weight(double **w,int m,int n,int flag) 

{ 

   int i,j; 



   srand((unsigned int)time(NULL)); 

   if(flag) //隨機(jī)生成 

   { 

       for(i=0;i<m+1;i++) 

       for(j=0;j<n+1;j++) 

       { 

          //-1.0~1.0的隨機(jī)值 

          w[i][j]=(double)(rand()%2000)/1000.0-1; 

       } 



   } 

   else //全部清0 

   { 

       for(i=0;i<m+1;i++) 

       for(j=0;j<n+1;j++) 

       { 

          w[i][j]=0.0; 

       } 

   } 



} 



//計(jì)算sigmoid函數(shù) 

double sigmoid(double x) 

{ 

   return 1.0/(1.0+exp(-x)); 

} 



/**////////////////////////////////////////////////////////////////////// 

//建立神經(jīng)網(wǎng)絡(luò) 

// 參數(shù) 

//       nIn  --輸入層神經(jīng)元數(shù) 

//       nHidden --隱層神經(jīng)元數(shù) 

//       nOut  --輸出層神經(jīng)元數(shù) 

/**////////////////////////////////////////////////////////////////////// 

BPNN_t *bpnn_create(int nIn,int nHidden,int nOut) 

{ 

   BPNN_t *pNet; 

   pNet=(BPNN_t*)malloc(sizeof(BPNN_t)); 



   pNet->in_n=nIn; 

   pNet->hidd_n=nHidden; 

   pNet->out_n=nOut; 



   pNet->in_unit=bpnn_malloc1d(nIn+1); //增加1保存閥值分量b 

   pNet->hidd_unit=bpnn_malloc1d(nHidden+1); 

   pNet->out_unit=bpnn_malloc1d(nOut+1); 

   pNet->hidd_delta=bpnn_malloc1d(nHidden+1); 

   pNet->out_delta=bpnn_malloc1d(nOut+1); 

   pNet->hidd_dfda=bpnn_malloc1d(nHidden+1); 

   pNet->out_dfda=bpnn_malloc1d(nOut+1); 

   pNet->target=bpnn_malloc1d(nOut+1); 



   pNet->in_unit[0]=1.0; //閥值分量 

   pNet->hidd_unit[0]=1.0; 



   //網(wǎng)絡(luò)權(quán)重 

   pNet->in_w=bpnn_malloc2d(nIn+1,nHidden+1); 

   pNet->hidd_w=bpnn_malloc2d(nHidden+1,nOut+1); 

   pNet->prev_in_w=bpnn_malloc2d(nIn+1,nHidden+1); 

   pNet->prev_hidd_w=bpnn_malloc2d(nHidden+1,nOut+1); 



   //初始化權(quán)值 

   bpnn_init_weight(pNet->in_w,nIn,nHidden,1); 

   bpnn_init_weight(pNet->hidd_w,nHidden,nOut,1); 

   bpnn_init_weight(pNet->prev_in_w,nIn,nHidden,0); 

   bpnn_init_weight(pNet->prev_hidd_w,nHidden,nOut,0); 



   return pNet; 

} 



//銷毀網(wǎng)絡(luò) 

void bpnn_destroy(BPNN_t *pNet) 

{ 

   int i; 

   int n1; 

   int n2; 

   n1=pNet->in_n; 

   n2=pNet->hidd_n; 


   free(pNet->in_unit); 

   free(pNet->hidd_unit); 

   free(pNet->out_unit); 

   free(pNet->hidd_delta); 

   free(pNet->out_delta); 

   free(pNet->hidd_dfda); 

   free(pNet->out_dfda); 

   free(pNet->target); 



   for(i=0;i<n1+1;i++) 

   { 

     free(pNet->prev_in_w[i]); 

     free(pNet->in_w[i]); 

   } 

   free(pNet->prev_in_w); 

   free(pNet->in_w); 



   for(i=0;i<n2+1;i++) 

   { 

     free(pNet->prev_hidd_w[i]); 

     free(pNet->hidd_w[i]); 

   } 

   free(pNet->prev_hidd_w); 

   free(pNet->hidd_w); 

   free(pNet); 



} 



/**////////////////////////////////////////////////////////////////////// 

//前向計(jì)算本層的輸出 

// 參數(shù) 

//     layer1 --上一層神經(jīng)元數(shù)組 

//     layer2 --該層神經(jīng)元數(shù)組 

//     conn  --上層連接權(quán)值 

//  n1       --上層神經(jīng)元個(gè)數(shù) 

//     n2     --本層神經(jīng)元個(gè)數(shù) 

// 返回 

//  更新layer1,layer2 

/**////////////////////////////////////////////////////////////////////// 

void bpnn_layerforward(double *layer1,double *layer2,double **conn,int n1,int n2) 

{ 

   double sum; 

   int j,k; 


   layer1[0]=1.0; //以第0個(gè)代表閥值分量 

   for(j=1;j<n2+1;j++) 

   { 

     sum=0.0; 

     for(k=0;k<n1+1;k++) 

     {
		 sum+=conn[k][j]*layer1[k];
	 } 



     layer2[j]=sigmoid(sum); 

   } 

} 



/**//////////////////////////////////////////////////////////////////////[Page] 

//計(jì)算輸出層反傳誤差(單個(gè)樣本) 

// 參數(shù) 

//     delta --反傳誤差向量 

//     target --目標(biāo)值 

//     output --網(wǎng)絡(luò)輸出值 

//  nj  --輸出層神經(jīng)元數(shù) 

//     err  --總誤差 

// 返回 

//  更新err,delta 

/**////////////////////////////////////////////////////////////////////// 

void bpnn_out_error(double *delta,double *dfda,double *target,double *output,int nj,double*err) 

{ 

   int j; 

   double errsum=0.0; 



   for(j=0;j<nj+1;j++) 

   { 

     //求反傳誤差 

     delta[j]=output[j]*(1-output[j])*(target[j]-output[j]); 

     dfda[j]=output[j]*(1-output[j]); 

     errsum+=fabs(delta[j]); 

   } 

   *err=errsum; 



} 



/**////////////////////////////////////////////////////////////////////// 

//計(jì)算隱層反傳誤差(單個(gè)樣本) 

// 參數(shù) 

//     delta_h --隱層反傳誤差向量 

//     delta_o --輸出層反傳誤差 


//------------------ Page 8-----------------------

//     dfda_h 

//     dfda_h 

//     nh      --隱層神經(jīng)元數(shù)目 

//  nout  --輸出層神經(jīng)元數(shù) 

//     w_ho  --隱層到輸出層連接權(quán)值 

//     h_unit  --隱層神經(jīng)元數(shù)組 

//     err     --總誤差[Page] 

// 返回 

//  更新err,delta_h 

/**////////////////////////////////////////////////////////////////////// 

void bpnn_hidd_error(double *delta_h,double *delta_o,double *dfda_h,double *dfda_o,int nh,int nout,double **w_ho,double *h_unit,double *err) 

{ 

   int j,k; 

   double hidd,sum,sum2,errsum; 



   errsum=0.0; 

   for(j=0;j<nh+1;j++) 

   { 

     hidd=h_unit[j]; 

     sum=0.0; 

     sum2=0.0; 

     for(k=1;k<nout+1;k++) 

     { 

        sum+=delta_o[k]*w_ho[j][k]; 

        sum2+=dfda_o[k]*w_ho[j][k]; 

     } 

     delta_h[j]=hidd*(1-hidd)*sum; 

     dfda_h[j]=hidd*(1-hidd)*sum2; 

     errsum+=fabs(delta_h[j]); 

   } 

   *err=errsum; 



} 



//計(jì)算整個(gè)網(wǎng)絡(luò)輸出 

void bpnn_nnforward(BPNN_t *pNet) 

{ 

   int nIn,nHidd,nOut; 

   nIn=pNet->in_n; 

   nHidd=pNet->hidd_n; 

   nOut=pNet->out_n; 



   //計(jì)算輸入層--隱層 


//----------------------- Page 9-----------------------

   bpnn_layerforward(pNet->in_unit,pNet->hidd_unit,pNet->in_w,nIn,nHidd); 

   //計(jì)算隱層--輸出層 

   bpnn_layerforward(pNet->hidd_unit,pNet->out_unit,pNet->hidd_w,nHidd,nOut);

} 



/**////////////////////////////////////////////////////////////////////// 

//最速下降法的BP網(wǎng)絡(luò)單次訓(xùn)練(全部樣本) 

// 參數(shù) 

//    pNet      --已初始化的神經(jīng)網(wǎng)絡(luò) 

//    eta     --最速下降步長 

//    indata     --輸入的樣本數(shù)組 

//    targetdata--輸出期望 

//  np         --樣本個(gè)數(shù) 

// 返回 

//    返回更新后的平方誤差 

//  更新pNet 

/**////////////////////////////////////////////////////////////////////// 

double bpnn_train_steepest(BPNN_t *pNet,double eta,double **indata,double **targetdata,int np) 

{ 

   int p,i,j,k; 

   int nIn,nHidd,nOut; 

   double errout,errh; 

   double esqrsum,esqr; 

   double **pGradIn,**pGradH; 



   nIn=pNet->in_n; 

   nHidd=pNet->hidd_n; 

   nOut=pNet->out_n; 



   pGradIn=bpnn_malloc2d(nIn+1,nHidd+1); 

   pGradH=bpnn_malloc2d(nHidd+1,nOut+1); 



   //累加梯度清0 

   for(j=0;j<=nIn;j++) 

   for(k=0;k<=nHidd;k++) 

   { 

     pGradIn[j][k]=0.0; 

   } 

   for(j=0;j<=nHidd;j++) 

   for(k=0;k<=nOut;k++) 

   { 

     pGradH[j][k]=0.0; 

   } 


//----------------------- Page 10-----------------------

   for(p=0;p<np;p++) 

   { 

     //輸入數(shù)據(jù) 

     pNet->in_unit[0]=0.0; //無偏移[Page] 

     for(i=1;i<=nIn;i++) 

        pNet->in_unit[i]=indata[p][i-1]; 

     for(i=1;i<=nOut;i++) 

        pNet->target[i]=targetdata[p][i-1]; 



     bpnn_nnforward(pNet); 

     bpnn_out_error(pNet->out_delta,pNet->out_dfda,pNet->target,pNet->out_unit,nOut,&errout); 

     bpnn_hidd_error(pNet->hidd_delta,pNet->out_delta,pNet->hidd_dfda,pNet->out_dfda,nHidd,nOut,pNet->hidd_w,pNet->hidd_unit,&errh); 



     //累加梯度 

     for(j=0;j<=nIn;j++) 

     for(k=1;k<=nHidd;k++) 

     { 

        pGradIn[j][k]+=pNet->hidd_delta[k]*pNet->in_unit[j]; 

     } 

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本一区二区免费在线| 蜜臀国产一区二区三区在线播放| 国产欧美精品在线观看| 久久伊99综合婷婷久久伊| 欧美电视剧在线观看完整版| 69av一区二区三区| 在线播放国产精品二区一二区四区| 欧美中文字幕久久| 欧美日韩在线精品一区二区三区激情| 色婷婷综合久久久| 在线观看国产精品网站| 欧美日韩大陆在线| 日韩你懂的在线播放| 精品国产一区二区三区四区四| 精品日韩一区二区三区免费视频| 精品国产a毛片| 久久婷婷成人综合色| 中文字幕av一区二区三区高| 一区精品在线播放| 亚洲综合无码一区二区| 图片区小说区国产精品视频| 免费在线看成人av| 国产一区二区三区精品欧美日韩一区二区三区| 国产伦精品一区二区三区在线观看| 国产乱子轮精品视频| 成人av网站在线| 色激情天天射综合网| 欧美日韩国产成人在线免费| 欧美一级在线视频| 国产欧美精品国产国产专区| 亚洲夂夂婷婷色拍ww47 | 丝袜美腿亚洲综合| 另类的小说在线视频另类成人小视频在线 | 91一区二区三区在线播放| 欧美网站大全在线观看| 欧美电视剧免费观看| 欧美激情综合网| 亚洲成人激情自拍| 国产又黄又大久久| 老色鬼精品视频在线观看播放| 精彩视频一区二区三区| 国产精一区二区三区| 成人一级视频在线观看| 91日韩精品一区| 欧美日韩亚洲综合| 日韩丝袜情趣美女图片| 亚洲国产精品黑人久久久| 亚洲色图一区二区| 天堂蜜桃91精品| 国产在线播放一区三区四| 99久久精品情趣| 91精品国产丝袜白色高跟鞋| 亚洲国产日产av| 欧美96一区二区免费视频| 国产精品538一区二区在线| 国产精品996| 在线中文字幕一区| 精品久久久网站| 国产精品国模大尺度视频| 日韩电影免费在线观看网站| 国产毛片精品视频| 欧美色网站导航| 久久久亚洲国产美女国产盗摄| 亚洲人成网站影音先锋播放| 国产一区二区成人久久免费影院| 99精品视频在线观看| 日韩女同互慰一区二区| 亚洲欧美另类久久久精品2019| 日本欧美加勒比视频| 99久久国产免费看| 欧美大黄免费观看| 亚洲美女免费在线| 精品一区二区在线免费观看| 色综合久久天天| 久久午夜电影网| 亚洲v精品v日韩v欧美v专区 | 欧美精品v国产精品v日韩精品 | 亚洲宅男天堂在线观看无病毒| 国产精品一二三| 欧美一区二区三区爱爱| 亚洲精品视频自拍| 丁香婷婷综合激情五月色| 91尤物视频在线观看| 久久精品在这里| 视频一区二区国产| 在线视频一区二区免费| 国产丝袜美腿一区二区三区| 午夜一区二区三区视频| 不卡的av网站| 欧美电视剧在线观看完整版| 香蕉影视欧美成人| 91精彩视频在线| 欧美高清一级片在线观看| 激情久久久久久久久久久久久久久久| 91老师片黄在线观看| 欧美成人r级一区二区三区| 美女mm1313爽爽久久久蜜臀| 精品视频资源站| 亚洲欧美一区二区久久| 粉嫩在线一区二区三区视频| 欧美精品一区二区在线观看| 日本在线不卡视频一二三区| 欧美亚洲一区三区| 亚洲女女做受ⅹxx高潮| 成人免费va视频| 久久久国产综合精品女国产盗摄| 一区二区三区在线播放| 成人丝袜视频网| 久久亚洲精华国产精华液| 麻豆精品在线播放| 欧美一区二区日韩| 蜜臀国产一区二区三区在线播放 | 99久久久无码国产精品| 国产精品女主播在线观看| 国产精品996| 久久久www成人免费毛片麻豆 | 九九国产精品视频| 欧美一区二区在线视频| 日韩中文字幕91| 欧美理论电影在线| 性感美女久久精品| 欧美性一二三区| 五月天网站亚洲| 555www色欧美视频| 捆绑紧缚一区二区三区视频| 欧美mv和日韩mv国产网站| 久久国产精品色婷婷| 精品乱码亚洲一区二区不卡| 免费成人性网站| 精品国产百合女同互慰| 国产福利一区二区三区视频| 亚洲国产激情av| 国产99一区视频免费| 亚洲免费在线视频一区 二区| 一本大道综合伊人精品热热 | 午夜久久久久久| 欧美日韩成人综合在线一区二区| 亚洲国产日韩a在线播放性色| 欧美高清www午色夜在线视频| 日本欧美一区二区在线观看| 欧美va天堂va视频va在线| 国产成人综合网站| 国产精品久久久久久久岛一牛影视| 一本大道久久a久久综合婷婷| 亚洲成人动漫在线免费观看| 欧美一卡2卡3卡4卡| 国产ts人妖一区二区| 亚洲黄网站在线观看| 69堂成人精品免费视频| 国产成人午夜精品5599| 国产精品青草久久| 欧美日韩国产一二三| 亚洲精品一二三四区| 91精品国产入口在线| 国产美女在线精品| 一区二区三区美女视频| 欧美一区二区三区在线看| 成人一级黄色片| 日韩美女精品在线| 日韩精品一区二区三区swag| 激情av综合网| 一区二区三区国产精华| 久久午夜羞羞影院免费观看| 91美女精品福利| 日本不卡一区二区| 亚洲国产精品精华液2区45| 欧美日韩一级二级| 国产大片一区二区| 天堂久久一区二区三区| 亚洲男人天堂一区| 日韩精品一区在线观看| 一本大道久久a久久综合| 激情六月婷婷综合| 亚洲小说欧美激情另类| 久久精品亚洲麻豆av一区二区 | 亚洲情趣在线观看| 欧美成人欧美edvon| 欧美在线高清视频| 国产一区二区三区在线看麻豆| 一级中文字幕一区二区| 2020国产精品久久精品美国| 欧美影视一区在线| 高清不卡在线观看av| 肉肉av福利一精品导航| 亚洲欧洲99久久| 久久一夜天堂av一区二区三区| 欧美日韩免费视频| 99精品国产视频| 美女看a上一区| 日本91福利区| 一区二区三区在线播放| 国产精品视频一二| 久久美女高清视频| 日韩三级电影网址| 99久久久国产精品| 日韩精品一区二区三区四区 | 国产精品自拍av| 日韩制服丝袜av| 亚洲国产你懂的| 国产精品第13页|