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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? main.cpp

?? 神經網絡算法的C語言實現
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
     for(j=0;j<=nHidd;j++) 

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

     { 

        pGradH[j][k]+=pNet->out_delta[k]*pNet->hidd_unit[j]; 

     } 

   } 



   //權值調整////////////////////////// 

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

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

   { 

     pNet->in_w[j][k]+=eta*pGradIn[j][k]; 

   } 

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

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

   { 

     pNet->hidd_w[j][k]+=eta*pGradH[j][k]; 

   } 



   esqrsum=0.0; 

   //計算權值更新后的平方誤差 

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


//----------------------- Page 11-----------------------

   { 

     //輸入數據 

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

     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); 



     esqr=0.0; 

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

     { 

        esqr+=pNet->target[i]-pNet->out_unit[i];//計算累積平方誤差 

     } 

     esqrsum+=esqr*esqr; 

   } 



   bpnn_mfree2d(pGradIn,nIn+1); 

   bpnn_mfree2d(pGradH,nHidd+1); 



   return esqrsum; 

} 



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

//Levenberg-Marquardt的BP網絡訓練(全部樣本) 

// 參數 

//    pNet      --已初始化的神經網絡 

//    indata     --輸入的樣本數組 

//    targetdata--輸出期望 

//  np         --樣本個數 

//  lamda      --lamda系數 

// 返回 

//    返回更新后的平方誤差[Page] 

//  更新pNet 

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

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

{ 

   int i,j,k,p,pos; 

   double errout,errh; 

   double esqrsum,esqr; 

   double *pGrad;  //合并的梯度向量 

   double **pGradIn,**pGradH; //每一層的梯度矩陣 


//----------------------- Page 12-----------------------

   double **pGradIn2,**pGradH2; 

   double *pHess;  //H矩陣 

   double *pAlpha,*pBeta; //用于計算逆矩陣 

   int nIn,nHidd,nOut; 

   int vecsize; 



   nIn=pNet->in_n; 

   nHidd=pNet->hidd_n; 

   nOut=pNet->out_n; 



   vecsize=(nIn+1)*(nHidd)+(nHidd+1)*(nOut); 

   pGrad=bpnn_malloc1d(vecsize); 

   pHess=bpnn_malloc1d(vecsize*vecsize); 

   pAlpha=bpnn_malloc1d(vecsize*vecsize); 

   pBeta=bpnn_malloc1d(vecsize); 

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

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

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

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



   //每一層梯度清0 

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

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

   { 

       pGradIn[j][k]=0.0; 

       pGradIn2[j][k]=0.0; 

   } 

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

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

   { 

       pGradH[j][k]=0.0;

       pGradH2[j][k]=0.0; 

   } 



   //計算梯度向量 

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

   { 

       //輸入數據 

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

       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]; 


//----------------------- Page 13-----------------------

     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); 



     pos=0; 

     //累加梯度 

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

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

     { 

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

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

        pGrad[pos]=pGradIn[j][k]; //歸并到梯度向量 

        pBeta[pos]=pGradIn2[j][k]; 

        ++pos; 

     }

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

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

     { 

        pGradH[j][k]+=pNet->out_dfda[k]*pNet->hidd_unit[j]; 

        pGradH2[j][k]+=pNet->out_delta[k]*pNet->hidd_unit[j]; 

        pGrad[pos]=pGradH[j][k]; //歸并到梯度向量 

        pBeta[pos]=pGradH2[j][k]; 

        ++pos; 

     } 

   }//endfor 



   //構造H矩陣 

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

   { 

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

     { 

        pHess[i+j*vecsize]=pGrad[j]*pGrad[i]; 

        pAlpha[i+j*vecsize]=pHess[i+j*vecsize]; 

     } 

     //添加對角線 

     pAlpha[j+j*vecsize]=pHess[j+j*vecsize]*(1.0+*lamda); 

   } 



   //算出權值增量 

   gauss_jordan(pAlpha,pBeta,vecsize); 



   pos=0; 


//----------------------- Page 14-----------------------

   //權值調整////////////////////////// 

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

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

   { 

     pNet->prev_in_w[j][k]=pNet->in_w[j][k]; 

     pNet->in_w[j][k]+=pBeta[pos]; 

     ++pos; 

   } 

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

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

   { 

     pNet->prev_hidd_w[j][k]=pNet->hidd_w[j][k]; 

     pNet->hidd_w[j][k]+=pBeta[pos]; 

     ++pos; 

   } 



   //計算權值更新后的平方誤差 

   esqrsum=0.0; 

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

   { 

     //輸入數據 

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

     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); 



     esqr=0.0; 

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

     { 

        esqr+=pNet->target[i]-pNet->out_unit[i];//計算累積平方誤差 

     } 

     esqrsum+=esqr*esqr; 

   } 



   //釋放內存 

   bpnn_mfree2d(pGradIn,nIn+1); 

   bpnn_mfree2d(pGradH,nHidd+1); 

   bpnn_mfree2d(pGradIn2,nIn+1); 

   bpnn_mfree2d(pGradH2,nHidd+1); 

   free(pHess); 

   free(pBeta); 


//----------------------- Page 15-----------------------

   free(pAlpha); 

   free(pGrad); 



   return esqrsum; 

} 



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

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

// 參數 

//      a--輸入系數矩陣,輸出被其逆矩陣代替(n*n)[Page] 

//  b--等號右邊的矩陣B,輸出時被對應解向量代替(n*1) 

//      n-- a的維數 

// 

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

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

{ 

   int i,j,k,l,ll; 

   int icol,irow; 

   double big,dum,pivinv; 

   int *ipiv=NULL; 

   double *inva=NULL; 



   ipiv=(int*)malloc(n*sizeof(int)); 

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



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

   { 

      ipiv[j]=0; 

   } 

   SetEye(inva,n); 



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

   { 

      big=0.0; 

      for(j=0;j<n;j++)  //尋找主元(最大數) 

      { 

         if(ipiv[j]!=1) 

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

            { 

               if(ipiv[k]==0) 

               { 

                  if(fabs(a[k+j*n])>=big) 


//----------------------- Page 16-----------------------

                  { 

                      big=fabs(a[k+j*n]);

                      irow=j; 

                      icol=k; 

				  } 

			   }//endifipiv 

			} 

	  }//endforj 

      ++(ipiv[icol]); 



     //實施消元 

     if(irow!=icol) 

	 { 

		SWAP(b[irow],b[icol]); 

		for(l=0;l<n;l++) 

		{ 

			SWAP(a[l+irow*n],a[l+icol*n]); 

			SWAP(inva[l+irow*n],inva[l+icol*n]); 

		} 

	 } 



	 if(fabs(a[icol+icol*n])<EPSILON) 

	 { 

		return;                           //error奇異矩陣 

	 } 

	 pivinv=1.0/a[icol+icol*n]; 

	 b[icol]*=pivinv; 

	 for(l=0;l<n;l++) 

	 { 

		a[l+icol*n]*=pivinv; 

		inva[l+icol*n]*=pivinv; 

	 } 

	 for(ll=0;ll<n;ll++) 

	 { 

		if(ll!=icol) 

		{ 

			dum=a[icol+ll*n]; 

			b[ll]-=b[icol]*dum; 

			for(l=0;l<n;l++) 

			{ 

				a[l+ll*n]-=a[l+icol*n]*dum; 

				inva[l+ll*n]-=inva[l+icol*n]*dum; 

			} 

		} 


//----------------------- Page 17-----------------------

	 }//endfor 

  }//endforwhole 



     //更新a為逆矩陣 

     for(i=0;i<n*n;i++) 

           a[i]=inva[i]; 



     free(ipiv); 

     free(inva); 

} 



//設置單位矩陣 

void SetEye(double *mat,int n) 

{ 

     int i,j; 

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

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

     { 

           if(i==j) 

                mat[j+i*n]=1.0; 

           else 

                mat[j+i*n]=0.0;

     } 

} 



//測試程序 



//testprogram 

int main(int argc,char *argv[]) 

{ 

     const double prec=0.001; //精度 

	 int maxtry=5000; 

     int cnt=0; 

     int i,j,k; 

     double lamda=0.1; 

     BPNN_t *pNNet; 

     double **x; 

     double **y; 

     double esqr,oesqr,res; 

     int nIn,nHidd,nOut; 

     int nsample=20; //樣本數 



     //初始化樣本數據 

     x=bpnn_malloc2d(nsample,1); 


//----------------------- Page 18-----------------------

	 y=bpnn_malloc2d(nsample,1); 

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

	 { 

		x[i][0]=(double)i/(double)nsample; 

   //用正弦曲線驗證 

		y[i][0]=0.5*sin(x[i][0]*PI*0.5)+0.5; 

   //y[i][0]=-0.4*x[i][0]+1; 

   //y[i][0]=0.25*(x[i][0]-2)*(x[i][0]-2); 

	} 



//初始化神經網絡 

	pNNet=bpnn_create(1,8,1); 

	nIn=pNNet->in_n; 

	nHidd=pNNet->hidd_n; 

	nOut=pNNet->out_n; 

	oesqr=9999;  //infinite 



	while(cnt++<maxtry) 

	{ 

		esqr=bpnn_train_lm(pNNet,x,y,nsample,&lamda); 

		if(esqr<prec) 

			break; 

		else 

		{ 

			if(esqr<oesqr) //接受新解[Page] 

			{ 

				lamda*=0.1; //縮小lamda 

				oesqr=esqr; 

			} 

			else 

			{ 

				lamda*=10.0; //擴大lamda 

         //恢復舊權值 

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

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

					{ 

						pNNet->in_w[j][k]=pNNet->prev_in_w[j][k]; 

					} 

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

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

					{ 

						pNNet->hidd_w[j][k]=pNNet->prev_hidd_w[j][k]; 

					} 


//----------------------- Page 19-----------------------

			} 

		} 



   /**//*傳統BP 

       esqr=bpnn_train_steepest(pNNet,0.1,x,y,nsample); 

          if(esqr<prec)

           break; 

       */ 

   }



   //輸出測試數據
	printf("輸入樣本:期望值 訓練后的結果"); 

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

   { 

       pNNet->in_unit[1]=x[i][0]; 

       bpnn_nnforward(pNNet); 

       res=pNNet->out_unit[1]; 

       printf("%5f : %5f %6f",x[i][0],y[i][0],res); 

   } 

   printf(" esqr:%5f ",esqr); 



   bpnn_destroy(pNNet); 

   bpnn_mfree2d(x,nsample); 

   bpnn_mfree2d(y,nsample); 

   return 0; 

}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美肥妇毛茸茸| 亚洲男人天堂一区| 51精品秘密在线观看| 成人av集中营| 激情欧美一区二区三区在线观看| 亚洲欧美日本在线| 久久综合久久99| 日韩美女视频一区二区在线观看| 色婷婷综合久久久中文一区二区| 国产一区二区三区不卡在线观看 | 这里只有精品视频在线观看| 99久久免费精品| 成人精品在线视频观看| 国产电影一区二区三区| 国产一区二区影院| 国产一区二区女| 国产曰批免费观看久久久| 美腿丝袜在线亚洲一区| 亚洲不卡av一区二区三区| 亚洲在线视频一区| 亚洲第一成年网| 午夜国产精品一区| 免费高清视频精品| 紧缚奴在线一区二区三区| 久久国产精品99精品国产| 久久精品99国产精品| 六月婷婷色综合| 老司机免费视频一区二区三区| 韩国三级在线一区| 国产一区二区看久久| 国产999精品久久久久久绿帽| 国产尤物一区二区| 高清视频一区二区| 91在线国产观看| 欧美日韩精品免费| 91精品国产综合久久香蕉的特点 | 亚洲成在人线免费| 日本午夜一区二区| 国产成人在线电影| 亚洲一区影音先锋| 欧美午夜片在线观看| 51精品秘密在线观看| www日韩大片| 亚洲欧美视频一区| 免费在线视频一区| 国产成人精品免费在线| 在线观看视频一区| 国产日韩欧美激情| 亚洲综合免费观看高清完整版| 美女视频一区二区三区| 波多野结衣在线aⅴ中文字幕不卡| 91久久人澡人人添人人爽欧美| 日韩欧美国产一区二区在线播放| 国产精品欧美极品| 日本在线观看不卡视频| 91在线云播放| 精品1区2区在线观看| 一区二区三区四区不卡视频| 精久久久久久久久久久| 欧美体内she精视频| 国产欧美一区二区三区网站| 视频一区二区中文字幕| 成人h精品动漫一区二区三区| 日韩欧美一区二区免费| 亚洲美女精品一区| 国产精品538一区二区在线| 欧美日韩免费不卡视频一区二区三区| 国产亚洲成av人在线观看导航 | 精品精品国产高清一毛片一天堂| 一区二区三区av电影| 不卡av在线网| 国产精品乱码一区二区三区软件 | 亚洲成av人影院在线观看网| 成人午夜视频网站| 国产免费成人在线视频| 精品无人码麻豆乱码1区2区 | 99re热这里只有精品免费视频| 日韩欧美国产三级电影视频| 亚洲成av人片观看| 欧美日韩在线直播| 亚洲免费av高清| 97久久超碰国产精品| 国产精品全国免费观看高清| 国产精品白丝jk白祙喷水网站| 91麻豆精品国产91久久久久| 日韩中文字幕一区二区三区| 欧美色图一区二区三区| 亚洲成人第一页| 欧美视频一区二区三区四区 | 中文字幕在线不卡| 9色porny自拍视频一区二区| 国产精品久久久久婷婷| 99re热视频精品| 亚洲综合成人在线| 欧美福利视频一区| 久久精品国产77777蜜臀| 欧美精品一区二区三区蜜臀 | 精品国产1区二区| 国产成人在线视频网址| 国产精品高潮呻吟| 在线亚洲一区观看| 青青草一区二区三区| 久久久午夜精品| 日本韩国精品在线| 日韩vs国产vs欧美| 中文字幕精品一区二区三区精品| 99久久精品情趣| 午夜精品一区二区三区电影天堂 | 日本v片在线高清不卡在线观看| 欧美大胆人体bbbb| 成人深夜福利app| 亚洲国产一二三| 久久这里只有精品首页| 91影院在线免费观看| 欧美96一区二区免费视频| 国产欧美日韩综合| 欧美理论电影在线| 国产成人av电影在线播放| 午夜久久福利影院| 国产精品免费av| 日韩色在线观看| 99vv1com这只有精品| 蜜桃av噜噜一区| 亚洲综合自拍偷拍| 中文字幕精品—区二区四季| 欧美男人的天堂一二区| jiyouzz国产精品久久| 麻豆成人综合网| 亚洲一区二区综合| 国产精品大尺度| 久久久美女毛片| 日韩欧美久久久| 欧美日韩一区在线| 在线免费观看不卡av| 丁香另类激情小说| 国产在线一区二区| 日韩电影一二三区| 亚洲五码中文字幕| 亚洲欧美另类图片小说| 国产欧美一区二区三区网站| 久久先锋影音av| 精品国产sm最大网站免费看| 日韩欧美一二区| 日韩一区二区视频在线观看| 欧美日本在线播放| 欧美日韩精品一区二区在线播放| 欧美亚洲图片小说| 欧美综合天天夜夜久久| 欧美自拍偷拍午夜视频| 欧洲亚洲精品在线| 欧美午夜精品电影| 欧美日韩在线播放三区四区| 欧美色视频一区| 7777精品伊人久久久大香线蕉| 51精品视频一区二区三区| 欧美日韩国产区一| 精品免费国产一区二区三区四区| 欧美刺激午夜性久久久久久久| 日韩一区二区三| 日韩欧美中文一区二区| 久久久综合激的五月天| 久久九九久久九九| 国产精品久久久久久久久搜平片| 中文字幕一区二区三区在线不卡 | 99在线热播精品免费| 成人ar影院免费观看视频| 色婷婷综合在线| 91精品在线麻豆| 国产亚洲综合在线| 一区二区三区四区五区视频在线观看 | 中文字幕一区三区| 婷婷成人激情在线网| 裸体一区二区三区| 成人免费视频国产在线观看| 91麻豆swag| 精品久久久久久综合日本欧美| 国产欧美日产一区| 午夜精品久久久久久久久久| 精品在线观看免费| 色综合久久久久久久久久久| 7777精品伊人久久久大香线蕉超级流畅 | 91国产免费观看| 亚洲精品在线电影| 亚洲综合色在线| 国产精品18久久久| 欧美美女黄视频| 欧美激情在线一区二区| 日日夜夜精品免费视频| 成人国产精品免费观看动漫| 欧美一区二区三区成人| 亚洲色图欧洲色图| 国产精品一区二区x88av| 欧美日韩第一区日日骚| 中文一区一区三区高中清不卡| 日韩经典一区二区| 在线欧美小视频| 国产精品欧美综合在线| 国产一区二区精品在线观看| 欧美日本在线播放| 亚洲最色的网站|