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

📄 network.h

📁 VC的神经网络开发
💻 H
字号:
// NetWork.h: interface for the NetWork class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_NETWORK_H__24DE8FDB_3266_41EA_A32A_ADF8695E795F__INCLUDED_)
#define AFX_NETWORK_H__24DE8FDB_3266_41EA_A32A_ADF8695E795F__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#include "Math.h"

#define MIN_REAL      -HUGE_VAL
#define MAX_REAL      +HUGE_VAL
#define MIN(x,y)      ((x)<(y) ? (x) : (y))
#define MAX(x,y)      ((x)>(y) ? (x) : (y))

#define LO            0.1
#define HI            0.9
#define BIAS          1

#define sqr(x)        ((x)*(x))

//

typedef struct {                     /* A LAYER OF A NET:                     */
        INT           Units;         /* - number of units in this layer       */
        double*         Output;        /* - output of ith unit                  */
        double*         Error;         /* - error term of ith unit              */
        double**        Weight;        /* - connection weights to ith unit      */
        double**        WeightSave;    /* - saved weights for stopped training  */
        double**        dWeight;       /* - last weight deltas for momentum     */
} LAYER;

typedef struct {                     /* A NET:                                */
        LAYER**       Layer;         /* - layers of this net                  */
        LAYER*        InputLayer;    /* - input layer                         */
        LAYER*        OutputLayer;   /* - output layer                        */
        double          Alpha;         /* - momentum factor                     */
        double          Eta;           /* - learning rate                       */
        double          Gain;          /* - gain of sigmoid function            */
        double          Error;         /* - total net error                     */
} NET;

#define NUM_LAYERS    3				//层数为3
#define N             5			//输入个数 30
#define M             1				//输出个数

#define FIRST_YEAR    0
#define NUM_YEARS     30

#define TRAIN_LWB     (N)
#define TRAIN_UPB     (30)
#define TRAIN_YEARS   (TRAIN_UPB - TRAIN_LWB + 1)
#define TEST_LWB      (0)
#define TEST_UPB      (30)
#define TEST_YEARS    (TEST_UPB - TEST_LWB + 1)
#define EVAL_LWB      (0)
#define EVAL_UPB      (NUM_YEARS - 1)
#define EVAL_YEARS    (EVAL_UPB - EVAL_LWB + 1)

class NetWork  
{
public:
	NetWork();
	virtual ~NetWork();
public:
	FILE*	f;
	double  TrainError;
	double  TestError;
public:
	void InitializeRandoms();
	INT RandomEqualINT(INT Low, INT High);
	double RandomEqualREAL(double Low, double High);
	void InitializeApplication(NET* Net);
	void FinalizeApplication(NET* Net);
	void ReadRecord();
	void GenerateNetwork(NET* Net);
	void RandomWeights(NET* Net);
	void SetInput(NET* Net, double* Input);
	void GetOutput(NET* Net, double* Output);		//得到输出
	void SaveWeights(NET* Net);
	void RestoreWeights(NET* Net);
	void PropagateLayer(NET* Net, LAYER* Lower, LAYER* Upper);	//某层计算输出
	void PropagateNet(NET* Net);	//整个网络计算输出
	void ComputeOutputError(NET* Net, double* Target);		//输出的0.5倍的误差平方和	
	void BackpropagateLayer(NET* Net, LAYER* Upper, LAYER* Lower);	//计算每一层反向传播的权值调整的步长
	void BackpropagateNet(NET* Net);	//计算整个网络各层反向传播的权值调整的步长	
	void AdjustWeights(NET* Net);	//调整权值
	void SimulateNet(NET* Net, double* Input, double* Output, double* Target, BOOL Training);
	void TrainNet(NET* Net);
	void TestNet(NET* Net);		//观察误差调整情况
	void EvaluateNet(NET* Net);	//输出预测结果
};

#endif // !defined(AFX_NETWORK_H__24DE8FDB_3266_41EA_A32A_ADF8695E795F__INCLUDED_)

⌨️ 快捷键说明

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