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

📄 neuronetwork.h

📁 我以前写的一个的神经网络学习函数逼近和分类的例子
💻 H
字号:
//#if !defined(AFX_IGPC_NEURONETWORK_H_)
//#define AFX_IGPC_NEURONETWORK_H_

//////////////////////////////////////////////////////////////////////////////
//  class CNeuron, CNeuroNet, CNeuronBP, CNeuroNetBP, CNeuronIT, 
//		CNeuroNetIT declaration
//  Guo.X.W
//  2005.1
/////////////////////////////////////////////


#define NEURONET_FUNCTYPE_LINEAR  0
#define NEURONET_FUNCTYPE_SIGMOID 1
#define NEURONET_FUNCTYPE_WAVELET 2



class CNeuroNet;


class CNeuron : public CObject
{
private:

protected:
	int m_iLayerNo;			//the layer index of this neuron
	int m_iWeightNum;		//number of weights of this neuron
	int m_iFunType;			//function type
	double m_dThreshold;	//threshold
	int m_iNo;				//index of this neuron in its layer
	CNeuroNet* m_pNet;


public:
	double m_dInputSum;
	double m_dOutput;
	double* m_pWeights;		//weight array
	double m_dError;		//backward error

//	CNeuron(CNeuroNet* pNet, int iLayerNo, int iNo, double* pInitWeights, double dInitThreshold);
	CNeuron();
	void Initialize(CNeuroNet* pNet, int iLayerNo, int iNo, double* pInitWeights, double dInitThreshold);
	~CNeuron();

	void CalcInputSum();
	void CalcOutput();
	virtual BOOL AdjustWeights() = 0;
	void GenerateWeights();
	void OffsetWeights(double dOffset);
};

/////////////////////////////////////////////////////////////////
//BP network neuron
class CNeuronBP : public CNeuron
{
private:

protected:

public:

//	CNeuron(CNeuroNet* pNet, int iLayerNo, int iNo, double* pInitWeights, double dInitThreshold);
	CNeuronBP();
	~CNeuronBP();

	virtual BOOL AdjustWeights();

};

///////////////////////////////////////////////////////////////////////
//class CNeuronIT 交互传播网络神经元
class CNeuronIT : public CNeuron
{
private:

protected:

public:
	virtual BOOL AdjustWeights();
	BOOL NormalizeWeight();
	double CalcDistance();
};

///////////////////////////////////////////////////////////////////////
//class CNeuronSOM 自组织特征映射网络神经元
class CNeuronSOM : public CNeuronIT
{
private:

protected:

public:
	BOOL AdjustWeights(double dFactor);
};

////////////////////////////////////////////////////////////
//neuro-network
class CNeuroNet : public CObject
{
private:
	double* m_pInput;

	CNeuron*** m_pLayers;		//a pointer to a 2-D array of neurons
	int* m_pLayNodNum;		//each layer's neuron number
	int m_iLayNum;			//network's layer number
	int m_iMidLayFun;		//function of middle layer neurons
	int m_iOutLayFun;		//function of output layer neurons
	double m_dDelta;		//learning factor

protected:

public:
	CNeuroNet();
	Initialize(CNeuron*** pLayers, int* pLayNodNum, int iLayNum, int iMidLayFun, int iOutLayFun, double dDelta);
	~CNeuroNet();
	void GenerateInitWeights();
	void OffsetWeights(double dOffset);
	void SetInput(double* pInputVector);
	BOOL Train(int iTrainTimes);
	BOOL TrainOneTime();
	void ForwardCalc();
	virtual BOOL BackwardCalc()=0;

	int GetLayNodNum(int iLayNo);
	int GetLayNum();
	int GetOutLayFun();
	int GetMidLayFun();
	CNeuron* NeuronAt(int iLayNo, int iNo);
	double GetLearnFactor();
	void SetLearnFactor(double dLearnFactor);
};


////////////////////////////////////////////////////////////////////////
//BP network
class CNeuroNetBP : public CNeuroNet
{
private:
	CNeuronBP** m_Layers;
	double* m_pExpOutput;	//expected output

protected:

public:
	CNeuroNetBP();
	CNeuroNetBP(int* pLayNodNum, int iLayNum, int iMidLayFun, int iOutLayFun, double dDelta);
	~CNeuroNetBP();
	virtual BOOL BackwardCalc();
	void GetOutput(double* pOutputVector);
	void SetExpOutput(double* pExpOutputVector);
	double* GetExpOutput();
};


////////////////////////////////////////////////////////////////////////
//class CNeuroNetIT 交互传播网络
class CNeuroNetIT : public CNeuroNet
{
private:
	CNeuronIT** m_Layers;

protected:
	int GetWinNeuron();

public:
	//CNeuronIT** m_Layers;		//2-D array point to each neuron

	CNeuroNetIT();
	CNeuroNetIT(int iInLayNodNum, int iOutLayNodNum, double dDelta);
	~CNeuroNetIT();
	virtual BOOL BackwardCalc();
	int GetOutput();
	BOOL NormalizeVector(double* pVector, int iSize);
};

////////////////////////////////////////////////////////////////////////
//class CNeuroNetSOM 自组织特征映射网络
class CNeuroNetSOM : public CNeuroNetIT
{
private:
	CNeuronSOM** m_Layers;
	int m_iOutPlaneWidth;
	double m_dRadius;

protected:

public:
	CNeuroNetSOM();
	CNeuroNetSOM(int iInLayNodNum, int iOutPlaneWidth, double dDelta, double dRadius);
	~CNeuroNetSOM();
	virtual BOOL BackwardCalc();
};


// #endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -