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