?? backpropagation.h
字號:
/*
* Copyright (c) 2006
* All rights reserved.
*
* 文件名稱:BackPropagation.h
* 文件標識:
* 摘 要 :多層前饋神經(jīng)網(wǎng)絡BP算法類聲明
*
* 當前版本:1.0
* 作 者 :
* 完成日期:
*/
#pragma once
#define MINDOUBLE 0.00000001 //浮點數(shù)比較大小
//節(jié)點信息機構體
typedef struct
{
double val;
double net;
double err;
} BPNode;
class CBackPropagation
{
public:
//構造函數(shù)
CBackPropagation(void);
CBackPropagation(int inNodesNum, int outNodesNum);
//析構函數(shù)
~CBackPropagation(void);
//獲得輸入層節(jié)點數(shù)目
int GetInputNum(void);
//設置輸入層節(jié)點數(shù)目
bool SetInputNum(int num);
//獲得輸出層節(jié)點數(shù)目
int GetOutputNum(void);
//設置輸出層節(jié)點數(shù)目
bool SetOutputNum(int num);
//獲得隱含層層數(shù)
int GetHideLayersNum(void);
//設置隱含層層數(shù)
bool SetHideLayersNum(int num);
//獲得指定隱含層節(jié)點數(shù)目
int GetHideNodesNum(int layerIndex);
//設置指定隱含層節(jié)點數(shù)目
bool SetHideNodesNum(int layerIndex, int num);
//初始化網(wǎng)絡結構
bool InitNetwork(void);
//獲得指定權重
double GetWeight(int layerIndex, int preNodeIndex, int curNodeIndex);
//設置指定權重
bool SetWeight(int layerIndex, int preNodeIndex, int curNodeIndex, double weight);
//獲得樣本數(shù)目
int GetExamNum(void);
//設置樣本數(shù)目
bool SetExamNum(int num);
//獲得樣本
double GetExamValue(int examIndex, int index, int isX = 1);
//設置樣本值
bool SetExamValue(int examIndex, int index, double examValue, int isX = 1);
//獲得樣本最大值
double GetExamMax(int varIndex, int isX = 1);
//設置樣本最大值
bool SetExamMax(int varIndex, double value, int isX = 1);
//獲得樣本最小值
double GetExamMin(int varIndex, int isX = 1);
//設置樣本最小值
bool SetExamMin(int varIndex, double value, int isX = 1);
//網(wǎng)絡學習
bool Train(int trainTimes, double pace = 0.5);
//網(wǎng)絡計算
bool Calculate(void);
//獲得計算結果
double GetResult(int examIndex, int index);
protected:
//傳遞函數(shù)
virtual double TranFunction(double x);
//傳遞函數(shù)導函數(shù)
virtual double TranDFunction(double x);
//誤差顯示
virtual void ShowErr(int times, double err);
private:
int m_InNodesNum; //輸入層節(jié)點數(shù)目
int m_OutNodesNum; //輸出層節(jié)點數(shù)目
int m_HidLayersNum; //隱含層數(shù)目
int *m_HideNodesNum; //隱含層節(jié)點數(shù)目
double ***m_Weight; //神經(jīng)網(wǎng)絡權重
double ***m_Ajust; //反饋調(diào)節(jié)誤差
int m_ExamplesNum; //樣本數(shù)目
double **m_XExamples; //輸入樣本
double **m_YExamples; //輸出樣本
double *m_XYMaxMin[4]; //樣本最大和最小值
double **m_XUnitary; //歸一化輸入樣本
double **m_YUnitary; //歸一化輸出樣本
double **m_YOutPut; //網(wǎng)絡輸出值
BPNode **m_BPNodes; //網(wǎng)絡節(jié)點信息
//歸一化
bool UnitaryOper(void);
//查找樣本最值
bool CacMaxMin(void);
//前饋
bool Forward(int examIndex);
//反饋
bool Feedback(int examIndex);
//初始化反饋誤差
bool InitAjust(void);
//權重調(diào)整
bool Ajust(double pace);
//誤差計算
double CalErr(void);
//釋放樣本內(nèi)存
void FreeExamMem(void);
//釋放歸一化樣本內(nèi)存
void FreeUnitMem(void);
//釋放隱含層數(shù)目內(nèi)存
void FreeHideMem(void);
//釋放權重內(nèi)存
void FreeWeigMem(void);
//釋放樣本最值內(nèi)存
void FreeMaxMinMem(void);
//釋放節(jié)點信息內(nèi)存
void FreeNodesMem(void);
//釋放反饋誤差內(nèi)存
void FreeAjustMem(void);
};
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -