📄 backpropagation.h
字号:
/*
* Copyright (c) 2006
* All rights reserved.
*
* 文件名称:BackPropagation.h
* 文件标识:
* 摘 要 :多层前馈神经网络BP算法类声明
*
* 当前版本:1.0
* 作 者 :
* 完成日期:
*/
#pragma once
#define MINDOUBLE 0.00000001 //浮点数比较大小
//节点信息机构体
typedef struct
{
double val;
double net;
double err;
} BPNode;
class CBackPropagation
{
public:
//构造函数
CBackPropagation(void);
CBackPropagation(int inNodesNum, int outNodesNum);
//析构函数
~CBackPropagation(void);
//获得输入层节点数目
int GetInputNum(void);
//设置输入层节点数目
bool SetInputNum(int num);
//获得输出层节点数目
int GetOutputNum(void);
//设置输出层节点数目
bool SetOutputNum(int num);
//获得隐含层层数
int GetHideLayersNum(void);
//设置隐含层层数
bool SetHideLayersNum(int num);
//获得指定隐含层节点数目
int GetHideNodesNum(int layerIndex);
//设置指定隐含层节点数目
bool SetHideNodesNum(int layerIndex, int num);
//初始化网络结构
bool InitNetwork(void);
//获得指定权重
double GetWeight(int layerIndex, int preNodeIndex, int curNodeIndex);
//设置指定权重
bool SetWeight(int layerIndex, int preNodeIndex, int curNodeIndex, double weight);
//获得样本数目
int GetExamNum(void);
//设置样本数目
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);
//网络学习
bool Train(int trainTimes, double pace = 0.5);
//网络计算
bool Calculate(void);
//获得计算结果
double GetResult(int examIndex, int index);
protected:
//传递函数
virtual double TranFunction(double x);
//传递函数导函数
virtual double TranDFunction(double x);
//误差显示
virtual void ShowErr(int times, double err);
private:
int m_InNodesNum; //输入层节点数目
int m_OutNodesNum; //输出层节点数目
int m_HidLayersNum; //隐含层数目
int *m_HideNodesNum; //隐含层节点数目
double ***m_Weight; //神经网络权重
double ***m_Ajust; //反馈调节误差
int m_ExamplesNum; //样本数目
double **m_XExamples; //输入样本
double **m_YExamples; //输出样本
double *m_XYMaxMin[4]; //样本最大和最小值
double **m_XUnitary; //归一化输入样本
double **m_YUnitary; //归一化输出样本
double **m_YOutPut; //网络输出值
BPNode **m_BPNodes; //网络节点信息
//归一化
bool UnitaryOper(void);
//查找样本最值
bool CacMaxMin(void);
//前馈
bool Forward(int examIndex);
//反馈
bool Feedback(int examIndex);
//初始化反馈误差
bool InitAjust(void);
//权重调整
bool Ajust(double pace);
//误差计算
double CalErr(void);
//释放样本内存
void FreeExamMem(void);
//释放归一化样本内存
void FreeUnitMem(void);
//释放隐含层数目内存
void FreeHideMem(void);
//释放权重内存
void FreeWeigMem(void);
//释放样本最值内存
void FreeMaxMinMem(void);
//释放节点信息内存
void FreeNodesMem(void);
//释放反馈误差内存
void FreeAjustMem(void);
};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -