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

📄 som.h

📁 人工神经网络基本模型:BP、ART、Hopfield、SOM
💻 H
字号:
// Som.h: interface for the Som class.
/*****************************************************************
* 名称:自组织特征影射神经网络Som
* 作者:湘潭大学信息工程学院李▲▲   xtulbd@yahoo.com.cn
* 时间:2004-07-26
* 功能:识别鼠标书写的文字,识别结果为网络记忆的S个模式之一。
* DS:
	网络输入层具有N(row×col)个神经元,网络竞争层具有m×m=M个神经元。
	网络的学习样本为S个文字的二维掩膜的一维化向量sampleBins[N](N=row×col)与所对应的文字sampleWords[N]。
	网络的输入层神经元为input[N],网络的竞争层神经元为compete[m][m],
	网络的输出为output[M]。
	输入层与竞争层之间的连接权为weight[N][M]。
	学习率为beta;
	总学习次数time;
	领域大小为neighbor;
	获胜神经元gain;
* 学习算法:
	初始化连接权、学习率、邻域大小、总学习次数;
	给网络提供一个输入样本;
	计算输入样本与到输出层的连接权向量之间的距离;
	选择最小距离对应的输出层神经元为获胜神经元;
	调整到获胜神经元及其邻域内的神经元的连接权;
	给网络提供下一个输入样本,直至S个样本全部学习一遍;
	全部学习一遍之后,更新学习率、邻域大小学;
	进入下一轮学习,直至学习time回。
	附:回想时,选择与输入模式距离最近的竞争层神经元为获胜神经元,对应的输出文字与输入文字最相似。
* 方法(函数):
	1)学习
	设置学习样本;
	//void SetSample(int sampleBins[S][N], CString sampleWords[S]);
	 void SetSample(int **sampleBins, sampleWords[]);
	 void SetSample(int **sampleBins, sampleWords);
	初始化网络;
	void	InitNet();
	计算输入与到竞争层的连接权之间的距离;
	double	*distance;
	void	CalDiatance(int input[]);
	选取获胜神经元;
	int		*gain;
	void	SetGains();	
	调整到获胜神经元及其邻域内的神经元的连接权;
	2)回想
	设置输入;
	//void	SetInput(int input[]);
	获取输出;
	CString	GetOutput(int input[]);
	3) 其它
	构造函数;
	Som(int S, int N, int m, int sampleBins[], CString sampleWords[], double beta=0.9, int time=1000 );
	保存连接权为文件;
	WeightToFile(CString fileName);
******************************************************************/
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_SOM_H__E8769C48_91F9_419C_BC93_F0FB5A0FA71A__INCLUDED_)
#define AFX_SOM_H__E8769C48_91F9_419C_BC93_F0FB5A0FA71A__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

class Som  
{
	/**********************************************
	Som--|--Som--|--SetSamples
		 |		 |
		 |		 |--Study--|--InitNet
		 |	 			   |--CalDiatances
		 | 	 			   |--SetGains
		 |				   |--ChangeGainsWeight
		 |--GetSample
		 |--WeightsToFile
		 |--GetOutput
	***********************************************/
public:
	Som();
	virtual ~Som();
	Som(int S, int N, int m, int **sampleBins, CString sampleWords[], double beta=0.9, int time=10000 );
	Som(int S, int N, int m, int **sampleBins, CString sampleWords  , double beta=0.9, int time=10000 );
private:
	int	S;
	int	N;
	int	m,M;
	int		**sampleBins;
	CString	**sampleWords;
	//int		*input;
	//int		*compete;
	double	*distance;
	int		*output;
	double	**weight;
	double	beta,beta0;;
	int		time;
	int		neighbor,neighbor0;
	int		*gains;
	//void SetSamples(int sampleBins[S][N], CString sampleWords[S]);
	void SetSamples(int **sampleBins, CString sampleWords[]);//设置学习样本;
	void SetSamples(int **sampleBins, CString sampleWords);
	void	Study();//学习
	void	InitNet();//初始化网络;
	void	CalDiatances(int input[]);//计算输入与到竞争层的连接权之间的距离;
	void	SetGains(int sample);	//选取获胜神经元;
	void	ChangeGainsWeight(int input[]);//调整到获胜神经元及其邻域内的神经元的连接权;
public:
	void	GetSample(int sampleNum, int sampleBin[]);
	void	GetResult(int g, int Bin[]);
	void	WeightsToFile(CString fileName); //保存连接权为文件;
	void	GainsToFile(CString fileName); //保存连接权为文件;
	//void	SetInput(int input[]);//设置输入;
	int		GetOutput(int input[]);//获取输出;
	CString	GetOutputWord(int input[]);//获取输出;

};

#endif // !defined(AFX_SOM_H__E8769C48_91F9_419C_BC93_F0FB5A0FA71A__INCLUDED_)

⌨️ 快捷键说明

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