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

📄 cell.h

📁 用BP算法实现数字识别功能
💻 H
字号:
#ifndef __NERVE_CELL_INCLUDE
#define __NERVE_CELL_INCLUDE

#include <windows.h>
#include <vector>
#include <map>
/*
每个神经元的输出是下一个神经元的输入
每个神经元保存前一层神经元和它连线的权重值
虚拟神经元没有输入只有输出,并且每次迭代的输出都是-1
*/
class CNerve_cell
{
public:
	enum {INPUT_TYPE = 0, HIDE_TYPE, VIRTUAL_TYPE, OUTPUT_TYPE};
	typedef std::map<int, double> WEIGHT_MAP;
public:
	CNerve_cell( int ntype )
	{
		db_output_val   = 0.0;
		db_grads        = 0.0;
		db_input_val    = 0.0;
		db_old_input    = 0.0;
		cell_type       = ntype;
		if ( ntype == VIRTUAL_TYPE)
			db_output_val = db_input_val = -1;
	}
	int    cell_type;           //神经元类型
	double db_grads;            //所求的梯度值
	//输入值
	void   Put_input_value ( int pos, std::vector <CNerve_cell *> & vec_cell);
	void   Put_input_value ( double x );
	//根据公式计算输出
	void   Calculate();
	double Get_output_value ();       //返回计算结果
	double Get_old_input ();          //返回上次输入的值
	void   Put_weight ( int pos, double dbw ); //修改j层神经元与i层神经元的权重
	double Get_weight (int pos); //返回某个神经元的权重
	void   Update_weight (int pos, double diffw);
	double Get_diff_w (int pos);
	void   Put_diff_w ( int pos, double w);
private:
	double       db_output_val;       //根据公式计算的输出值
	double       db_input_val;        //输入值
	double       db_old_input;        //保存上次输入的值
	WEIGHT_MAP   map_weight;
	WEIGHT_MAP   map_diff_w;
};

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -