⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bpnn_simulate.h

📁 这是我自己花了很多时间写的一个BP神经网络类
💻 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 + -