本部分主要是BP神经网络的C++代码部分,在这里简单的介绍下代码的头文件,具体代码的实现以及测试数据,请在csdn资源里下载:http://download.csdn.net/detail/hjkhjk007/5503911
为了方便广大用户的使用,本人将BP神经网络写成了一个BPNNS类,这样用户们可以很方便的将此类潜入到自己的工程当中,此类的具体的使用规则,下面会介绍。
/***************************************************************************
* 文件名称:BPNNs.h
* 摘 要:BP神经网络
* 作 者:黄继昆
*
* 修改记录:
*[日期] [作者/修改者] [修改原因]
*2012.7.14 黄继昆 添加
***************************************************************************/
#pragma once
#include <stdio.h>
#include <math.h>
//算法
#define traingd 0 // 基本的梯度下降算法
#define traingdm 1 // 增加动量项的梯度下降算法
#define traingdx 2 // 动量及自适应学习速率的梯度下降算法
#define traincgf 3 // 共轭梯度算法
#define trainrp 4 // 弹性BP算法
//使用的传递函数
#define SIGMOID 10 // sigmoid 函数
#define PURLINE 11 // purelin函数
// 神经网络 类型
#define BP 12 //bp神经网络
#define ITEMS 13
#define MAXWEIGHT ((float)0.3)
#define SCALEWEIGHT ((float)32767)
typedef float *PFLOAT;
typedef PFLOAT VECTOR;
typedef PFLOAT *MATRIX;
//创建BP神经网络参数结构体
typedef struct _NNS_CREACTE
{
int InputNodes; // 输入层节点数
int HiddenLayers; // 隐层数
int *HiddenNodes; // 各隐层的节点数
int OutputNodes; // 输出层节点数
int Patterns; // 训练实例数
}BPNNS_CreateInfo,*pBPNNS_CreateInfo;
//训练神经网络参数结构体
typedef struct _NNS_TRAIN
{
int TrainMethod; // 训练中使用的算法
int OLTF; // OutputLayerTransferFunc输出层使用的传递函数
int HLTF; // HindderLayerTransferFunc隐层使用的传递函数
int Iterations; // 训练次数
float ErrorLeve; // 误差级别
float eta; // 定义学习速率(步长)
float alpha; // 定义动量因子(该值在有动量的梯度下降算法当中才有效)
}BPNNS_TrainInfo,*pBPNNS_TrainInfo;
class CBPNNs
{
public:
CBPNNs(void);
public:
CBPNNs(BPNNS_CreateInfo CreateInfo);
public:
~CBPNNs(void);
public:
//构造网络