📄 neuronetwork.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 + -