BP神经网络C语言实现

BP神经网络C语言实现

#include "iostream.h"

#include "iomanip.h"

#include "stdlib.h"

#include "math.h"

#include "stdio.h"

#include "time.h"

#include "fstream.h"

#define N 11 //学习样本个数

#define IN 5 //输入层神经元数目

#define HN 8 //隐层神经元数目

#define HC 3 //隐层层数

#define ON 3 //输出层神经元数目

#define Z 200000 //旧权值保存-》每次study的权值都保存下来

double P[IN]; //单个样本输入数据

double T[ON]; //单个样本教师数据

double U11[HN][IN]; //输入层至第一隐层权值

double U12[HN][HN]; //第一隐层至第二隐层权值

double U23[HN][HN]; //第二隐层至第三隐层权值

double V[ON][HN]; //第三隐层至输出层权值

double X1[HN]; //第一隐层的输入

double X2[HN]; //第二隐层的输入

double X3[HN]; //第三隐层的输入

double Y[ON]; //输出层的输入

double H1[HN]; //第一隐层的输出

double H2[HN]; //第二隐层的输出

double H3[HN]; //第三隐层的输出

double O[ON]; //输出层的输出

double YU_HN1[HN]; //第一隐层的阈值

double YU_HN2[HN]; //第二隐层的阈值

double YU_HN3[HN]; //第三隐层的阈值

double YU_ON[ON]; //输出层的阈值

double err_m[N]; //第m个样本的总误差

double a; //学习效率

double alpha; //动量因子

//定义一个放学习样本的结构

struct {

double input[IN]; //输入在上面定义是五个

double teach[ON]; //输出在上面定义是三个

}Study_Data[N];//学习样本

//bp算法用来保存每次计算的权值

struct {

double old_U11[HN][IN]; //保存输入层至隐层权值旧权

double old_U12[HN][HN]; //保存第一隐层至第二隐层权值

double old_U23[HN][HN]; //保存第二隐层至第三隐层权值

double old_V[ON][HN]; //保存第三隐层至输出层旧权

}Old_WV[Z];

saveWV(int m)

{

for(int i=0;i

{

for(int j=0;j

{

Old_WV[m].old_U11[i][j] = U11[i][j];

}

}

for(int i1=0;i1

{

for(int j1=0;j1

{

Old_WV[m].old_U12[i1][j1] = U12[i1][j1];

}

}

for(int i2=0;i2

{

for(int j2=0;j2

{

Old_WV[m].old_U23[i2][j2] = U23[i2][j2];

}

}

for(int i3=0;i3

{

for(int j3=0;j3

{

Old_WV[m].old_V[i3][j3] = V[i3][j3];

}

}

return 1;

}

///////////////////

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐