三层bp神经网络算法c语言程序设计-read.docVIP

  • 97
  • 0
  • 约3.32千字
  • 约 7页
  • 2017-10-16 发布于天津
  • 举报

三层bp神经网络算法c语言程序设计-read.doc

三层bp神经网络算法c语言程序设计-read

1、题目要求: 2、 算法原理及框图 2.1 BP算法框图 2.2 输入样本、输出样本表 序号 输入 输出 1 …… P …… N 2.3 算法 取初始权值: 取第一组输入样本,其网络输出 调整权系数 对于输出层 可以调整 对于隐层 同理 取第二组样本,重复上述过程,得到新的网络连接权值,然后把n组样本完全用一次,称为训练一次,如此往复地训练权值,直至: 用符合100组样本进行训练,网络对的逼近效果较为理想。再增加一个5节点的隐层,然后再训练,结果改善不大,因为层数和隐节点个数选取是根据经验选取,尚无理论上的指导,并不是层数和隐节点个数越多,其效果越好。 3 BP网络算法C语言源程序 /* 神经网络算法*/ #include stdio.h #include math.h #define Pi 3.14159 #define TRAIN 100 //训练样本数 #define TEST 50 //测试样本数 double W1[3]={1,1,1}; //输入层与第一隐层之间权值矩阵 double W2[3][4]={1,1,1,1, //第一隐层与第二隐层之间权值矩阵 1,1,1,1, 1,1,1,1}; double W3[4]={1,1,1,1}; //隐层与输出层之间权值矩阵 int N = 0; //已经完成的学习次数 double Err = 0.01; //偏差 double MSE = 1; //均方差累加和 int StudyTime = 20000; //学习次数 float Y = (float)0.1; //学习率 double sum; double T; double iTrainIn[TRAIN]; //训练样本输入 double iTrainOut[TRAIN]; //训练样本输出 double iTestIn[TEST]; //测试样本 double sigmoid(double x); //S型激励函数 void study(); //训练函数 void test(); //测试函数 main() { int i; T = (double)1/TRAIN; for(i=0;iTRAIN;i++) { iTrainIn[i] = -0.5 + i*T; iTrainOut[i] = (double)fabs(cos(iTrainIn[i]*4*Pi)); } T = (double)1/TEST; for(i=0;iTEST;i++) { iTestIn[i] = -0.5 + i*T; } study(); test(); } /////////////// //激励函数S型 ////////////// double sigmoid(double x) { double data; data = 1.0/(1.0 + exp(-x)); return data; } ///////////// //学习过程 //////////// void study() { int i; int j; int k; double U1[3],Y1[3],delta1[4],U2[4],delta2[4],Y2[4],U3,Y3,delta3; //开始学习直到学习次数达到要求或者均方差小于0.01 while((N=StudyTime)(MSE0.01)) { //输出前项传播过程 MSE = 0; for(i=0;iTRAIN;i++) { //Layer1 for(j=0;j3;j++) { U1[j] = W1[j]*sigmoid(iTrainIn[i]); Y1[j] = sigmoid(U1[j]); } //Layer2 for(k=0;k4;k++) { U2[k] = 0; for(j=0;j3;j++) { U2[k] = U2[k] + W2[j][k]*Y1[j];//W2[j][k] } Y2[k] = sigmoid(U2[k]); } //Layer3 U3=0; for(k=0;k4;k++) U3 = U3 + W3[k]*Y2[k]; Y3 = sigmoid(U3);

文档评论(0)

1亿VIP精品文档

相关文档