cell.h

来自「用BP算法实现数字识别功能」· C头文件 代码 · 共 50 行

H
50
字号
#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 + =
减小字号Ctrl + -
显示快捷键?