www.pudn.com > RBPNN.rar > CRBPNN.H


#ifndef CRBPNN_H 
#define CRBPNN_H 
 
//径向基概率神经网络 
class CRBPNN 
{ 
protected: 
	//控制参数 
	int		m_pN;					//输入模式个数 
	int		m_pD;					//输入模式维数 
	int		m_pC;					//输入模式类别数 
	int		m_in;					//输入层节点数=m_pD 
	int		m_out;					//输出层节点数=m_pC 
	int		m_mid1;					//第一隐层节点数=m_pN 
	int		m_mid2;					//第二隐层节点数=m_pC 
	char*	m_kernel;			//变换函数名(核) 
	char*	m_learningalgorithm;//网络训练所用的学习算法 
 
	int		*v_pNC;					//每个类别对应的模式数[m_pC] 
	int     *v_pSort;				//将模式按类别索引排序(从第1类开始,记录位置)[m_pN] 
	int     *v_pClass;				//输入模式的类别[m_pN] 
	double	**v_pX;					//输入模式[m_pN][m_in] 
	double	**v_expectD;			//期望输出[m_pN][m_out] 
	double	**v_realY;				//实际输出[m_pN][m_out] 
	double	**v_conS;				//中心控制矢量[m_mid1][m_in] 
	double	**v_midZ1;				//第一隐层输出[m_pN][m_mid1] 
	double	**v_midZ2;				//第二隐层输出[m_pN][m_mid2] 
	double	**v_weight;				//权值[m_out][m_mid2] 
 
public: 
	CRBPNN(); 
	~CRBPNN(); 
 
	void    Training(int,int,int,char*,char*,char*);	//网络训练 
	void	Classifying(int,char*);						//模式分类 
	void    SetWeight(char*);							//设置权值 
	void	GetWeight(char*);							//输出权值		 
	void	GetOutput(char*);							//网络输出				 
	void	GetEnergyJ();								//查看累积误差能量函数 
	double  CalcRightProbability(char*); 
 
protected: 
	void	CalcNumberperC();							//计算每个类别对应的模式个数 
	void	ChooseandSortconS();						//设置中心控制矢量,并将其按类别排好 
	void	CalcMidZ1();								//计算第一隐层输出 
	void	CalcMidZ2();								//计算第二隐层输出 
	 
	void	RLSA();										//递推最小二乘反向传播算法 
	void	CalcGain(int,double,double*,double**);		//计算卡尔曼增益 
	void	CalcIcorrP(int,double,double*,double**);	//迭代计算逆相关矩阵 
	void	CalcWeight(int,double*);					//迭代更新网络权值 
	double	CalcEnergyJ(int,double,double);				//迭代计算累积误差能量函数 
 
	void	CalcOutput();								//计算网络输出 
}; 
 
#endif //CRBPNN_H