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

📄 backpropagation.h

📁 以类库的形式实现了BP神经网络算法。可从该类基础上派生新类
💻 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 + -