?? annbp.h
字號:
// AnnBP.h: interface for the CAnnBP class.
//
//////////////////////////////////////////////////////////////////////
#define ABS(x) (((x) > 0.0) ? (x) : (-(x)))
/* 宏定義:快速拷貝 */
#define fastcopy(to,from,len)\
{\
register char *_to,*_from;\
register int _i,_l;\
_to = (char *)(to);\
_from = (char *)(from);\
_l = (len);\
for (_i = 0; _i < _l; _i++) *_to++ = *_from++;\
}
#define BIGRND 0x7fffffff
/*** 神經網絡的數據結構。網絡被假定為一個全連接的3層前向結構,
每層的單元0是閾值,這意味著真正的神經元編號為1-n
***/
typedef struct {
int input_n; /* 輸入層的神經元個數 */
int hidden_n; /* 隱含層的神經元個數 */
int output_n; /* 輸出層的神經元個數 */
double *input_units; /* 輸入層的神經元 */
double *hidden_units; /* 隱藏層的神經元 */
double *output_units; /* 輸出曾的神經元 */
double *hidden_delta; /* 隱藏層的誤差 */
double *output_delta; /* 輸出層的誤差 */
double *target; /* 目標向量 */
double **input_weights; /* 輸入層到隱藏層的連接權 */
double **hidden_weights; /* 隱藏層到輸出曾的連接權 */
/*** 下面兩個在迭代時使用 ***/
double **input_prev_weights; /* 前次輸入層導隱藏層權值的改變 */
double **hidden_prev_weights; /* 前次隱藏層導輸出層權值的改變 */
} BPNN;
class CAnnBP
{
public:
void SetBParm(double eta,double momentum);
void Initialize(int seed);
void Read(char* filename);
void Save(char *filename);
void Identify(double *input_unit,int input_num,double *target,int target_num);
void Train(double *input_unit,int input_num, double *target,int target_num, double *eo, double *eh);
void FreeBP();
void CreateBP(int n_in,int n_hidden,int n_out);
CAnnBP();
virtual ~CAnnBP();
double momentum1;
double eta1;
BPNN* net;
BPNN* bpnn_read(char *filename);
void bpnn_save(BPNN *net, char *filename);
void bpnn_train(BPNN *net, double eta, double momentum, double *eo, double *eh);
void bpnn_feedforward(BPNN* net);
BPNN* bpnn_create(int n_in, int n_hidden, int n_out);
void bpnn_free(BPNN *net);
void bpnn_initialize(int seed);
double* alloc_1d_dbl(int n);
void bpnn_adjust_weights(double *delta, int ndelta, double *ly, int nly, double** w, double **oldw, double eta, double momentum);
void bpnn_hidden_error(double* delta_h, int nh, double *delta_o, int no, double **who, double *hidden, double *err);
void bpnn_output_error(double *delta, double *target, double *output, int nj, double *err);
void bpnn_layerforward(double *l1, double *l2, double **conn, int n1, int n2);
BPNN* bpnn_internal_create(int n_in, int n_hidden, int n_out);
void bpnn_zero_weights(double **w, int m, int n);
void bpnn_randomize_weights(double **w, int m, int n);
double ** alloc_2d_dbl(int m, int n);
double dpn1();
double drnd();
double squash(double x);
};
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -