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

📄 bp.cpp~

📁 bp nuralnetwork code
💻 CPP~
字号:
#include<math.h>#include<iostream>#define HIDDENNO  15#define INPUTNO  20#define OUTNO  20#define NP  1double weight1[HIDDENNO][INPUTNO];double weight2[OUTNO][HIDDENNO];double outhidden[NP][HIDDENNO];double outinput[NP][INPUTNO];double outout[NP][OUTNO];double deltahidden[NP][HIDDENNO];double deltaout[NP][OUTNO];double delw1[HIDDENNO][INPUTNO];double delw2[OUTNO][HIDDENNO];double target[NP][HIDDENNO];double differ[NP][OUTNO];int main(){  float eta = 0.75,alpha = 0.075,scale = RAND_MAX,wmax = 0.8,y0 = 0.5,t1 = 0.4;  int h,i,j;  int p,q,iter = 1200;  double erms,sum1;  /************************ weight initialization ******************************/  std::cout << "random weight1 matrx initialization is in progress:\n";  for(i = 0;i < HIDDENNO;i++){    for(j = 0;j < INPUTNO;j++){      float frand = std::rand();      float wtemp = wmax * (1.0 - frand / scale);      weight1[i][j] = wtemp;    }  }  std::cout << "weight1 done!\n\n";  std::cout << "random weight2 matrx initialization is in progress:\n";  for(i = 0;i < OUTNO;i++){    for(j = 0;j < HIDDENNO;j++){      float frand = std::rand();      float wtemp = wmax * (1.0 - frand / scale);      weight2[i][j] = wtemp;    }  }  std::cout << "weight2 done!\n\n";  /************************ weight initialization ******************************/  /********************* delta weight initialization ***************************/  std::cout << "delta weight initialization is in progress:\n";  for(i = 0;i < HIDDENNO;i++){    for(j = 0;j < INPUTNO;j++){      delw1[i][j] = 0;    }  }  for(i = 0;i < OUTNO;i++){    for(j = 0;j < HIDDENNO;j++){      delw2[i][j] = 0;    }  }  std::cout << "delta weights havd been set to zero!\n\n";  /********************* delta weight initialization ***************************/  /************************* input initialization ******************************/  std::cout << "input initialization is in progress:\n";  for(p = 0;p < NP;p++){    for(i= 0;i < INPUTNO;i++){      outinput[p][i] = static_cast<double>(i)/20.0;    }  }  std::cout << "input done!\n\n";  /************************* input initialization ******************************/  /************************ expect initialization ******************************/  std::cout << "expect output initialization is in progress:\n";  for(p = 0;p < NP;p++){    for(i = 0;i < OUTNO;i++){      target[p][i] = (t1 * sin((2 * 3.1415926) * (outinput[p][i]))) + y0;    }  }  std::cout << "expect done!\n\n";  /************************ expect initialization ******************************/  /*********************************** start ***********************************/  for(q = 0;q < iter;q++){    for(p = 0;p < NP;p++){      for(h = 0;h < HIDDENNO;h++){	float sum = weight1[h][INPUTNO];	for(i = 0;i < INPUTNO;i++){	  sum = sum + weight1[h][i] * outinput[p][i];	}	outhidden[p][h] = 1.0 / (1.0 + exp(-sum));      }      for(j = 0;j < OUTNO;j++){	float sum = weight2[j][HIDDENNO];	for(h = 0;h < HIDDENNO;h++){	  sum = sum + weight2[j][h] * outhidden[p][h];	}	outout[p][j] = 1.0 / (1.0 + exp(-sum));      }      for(j = 0;j < OUTNO;j++){	deltaout[p][j] = (target[p][j] - outout[p][j])*outout[p][j]*(1.0 - outout[p][j]);      }      for(h = 0;h < HIDDENNO;h++){	float sum = 0.0;	for(j = 0;j < OUTNO;j++){	  sum = sum + deltaout[p][j]*weight2[j][h];	}	deltahidden[p][h] = sum * outhidden[p][h] * (1.0 - outhidden[p][h]);      }// the second p appeared........................      for(j = 0;j < OUTNO;j++){	float dw =0.0,sum = 0.0;	for(p = 0;p < NP;p++){	  sum = sum + deltaout[p][j];	}	dw = eta * sum + alpha * delw2[j][HIDDENNO];	weight2[j][HIDDENNO] += dw;	delw2[j][HIDDENNO] = dw;// suanxin quan zhi w2	for(h = 0;h < HIDDENNO;h++){	  float sum = 0.0;	  for(p = 0;p < NP;p++){	    sum = sum + deltaout[p][j]*outhidden[p][h];	  }	  dw = eta * sum + alpha * delw2[j][h];	  weight2[j][h] += dw;	  delw2[j][h] = dw;	}      }//tiao jie shi ru ceng de quanzhi      for(h = 0;h < HIDDENNO;h++){	float sum = 0.0,dw = 0.0;	for(p = 0;p < NP;p++){	  sum = sum + deltahidden[h][j];	}	dw = eta * sum + alpha * delw1[h][INPUTNO];	weight1[h][INPUTNO] += dw;	delw1[h][INPUTNO] = dw;	for(i = 0;i < INPUTNO;i++){	  float sum = 0.0;	  for(p = 0;p < NP;p++){	    sum = sum + deltahidden[p][i] * outinput[p][i];	  }	  dw = eta * sum + alpha * delw1[h][i];	  weight1[h][i] += dw;	  delw1[h][i] = dw;	}      }    }  }  for(p = 0;p < NP;p++){    float sum = 0.0;    for(j = 0;j < OUTNO;j++){      differ[p][j] = fabs(outout[p][j] - target[p][j]);    }    for(j = 0;j < OUTNO;j++){      sum = sum + differ[p][j]*differ[p][j];    }    erms = sqrt(0.05)*sqrt(sum);  }  std::cout << erms << ",";}

⌨️ 快捷键说明

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