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;
}
///