📄 bpnn_simulate.h
字号:
////////////////////////////////////////////////////////////////////////////
// 描述:CBPNN_Simulate.h
// 功能: 利用BP神经网络进行插值拟合
// 完成日期:2003.12.4
////////////////////////////////////////////////////////////////////////////
struct NeuralNetNode //BP神经网络隐层、输出层的神经元节点结构
{
double dOut; //节点输出,即节点的输入经过函数变换后得到的值。
double dErr; //节点局部误差:
double dOff; //本节点当前偏离值
double *pLink; //本节点与前面一层的所有神经元节点之间的当前连接权值
//动量即当前值与前一时刻的值之间的差。下面两个参数就是为了方便计
//算偏离值与连接权值的动量而设置的。
double dPreOff; //节点前一时刻偏离值
double *pPreLink;//本节点与前面一层所有神经元节点之间的前一时刻连接权值
};
struct TrainSample //训练样本的结构
{
double *dpInput;//一组输入值:一般界于[0,1]
double dTarget;//目标值:界于[0,1]
};
//注:dpInput的元素个数必须等于网络的输入层节点数。
class CBPNN_Simulate
{
public:
CBPNN_Simulate();
virtual ~CBPNN_Simulate();
public:
/*=====================================================
功能:构造神经网络
参数:(入口)lInputNodes:输入层节点数
(入口)lHideLayers:隐层数,一般隐层数设为1
(入口)lpHideNodes:指向各隐层节点数的指针
======================================================*/
long Create(long lInputNodes,long lHideLayers, long *lpHideNodes);
/*======================================================
功能:用整个训练样本集训练网络
参数:(入口)pSampleSet:训练样本集
(入口)dStudyRate:学习率
(入口)dMomentRate:动量率,即在网络训练中动量的影响因子
(入口)lMaxIterNums:网络训练的最大迭代次数
(入口)dMinRMS:网络训练的最小均方误差
========================================================*/
long Train(TrainSample *pSampleSet,long lSamples,double dStudyRate,
double dMomentRate,long lMaxIterNums,double dMinRMS);
/*======================================================
功能:用训练后稳定的网络进行插值拟合
参数:(入口)dpInput:网络输入
(出口)dSimulate:输入经过网络后得到的拟合值
========================================================*/
void Simulate(double *dpInput,double &dSimulate);
//释放在Create函数中申请的内存
void Close();
private:
//获得一随机值
double Random(double dLow,double dHigh);
//对各成员赋初值
void Initialize();
//用单个样本训练网络
void TrainWithOneSample(TrainSample Sample,double dStudyRate,double dMomentRate);
//输入值前向传播
void FPInput(double *dpInput);
//计算误差
void ComputeErr(double dTarget);
//误差反向传播
void BPErr(double dTarget);
//调节各层之间的权值
void Adjust(double dStudyRate,double dMomentRate);
private:
long m_lInNodes;//输入层节点数
long m_lOutNodes;//输出层节点数
long m_lHideLayers;//隐层数
long *m_lpHideNodes;//各隐层节点数的指针
double *m_dpInput;//指向输入层的指针
double m_dError;//单个样本训练误差
NeuralNetNode *m_pOutNode;//指向输出层节点的指针
NeuralNetNode **m_ppHideNode;//指向各隐层节点的指针
};
/////////////////////////////////////////////////////////////////////////////////////
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -