📄 inputwnd.h
字号:
/////////////////////////////////////////////////////////////////////////////
/* 工程:手写数字识别系统 */
/* 文件: InputWnd.h : 头文件 */
/* 功能:输入终端和数据处理类 */
/* 作者:陈海艺 */
/* 时间: 2004-6-23 */
/* Email:Iorikingdom@hotmail.com */
/////////////////////////////////////////////////////////////////////////////
#pragma once
#define LEN 10
#define LENF 10.0
#define N LEN*LEN //输入层节点数
#define M 5 //M为隐层的节点数
#define P 10 //P输出层的节点数
#define FX(x) 1/(1+exp(-x)) //特征函数
#define DFX(x) FX(x)*(1-FX(x)) //特征函数的导数
#define A 0.7 //学习系数
#define precision 0.5 //精度
//返回结构体
typedef struct {
int result;
float error;
}RESULT,*PRESULT;
typedef struct {
BYTE Figure;//识别的数字
int input[LEN*LEN];//输入样本
int output[P];
bool simpling; //用来判断是否被训练过
}E,*PE;//用来存储识别信息的结构
//权值结构体
typedef struct{
float v[N][M];
float w[M][P];
}WEIGHT,*PWEIGHT;
//用来文件输入输出的结构体
typedef struct{
E e[10];
WEIGHT WE;
}DATA,*PDATA;
class CInputWnd : public CWnd
{
DECLARE_DYNAMIC(CInputWnd)
public:
CInputWnd();
virtual ~CInputWnd();
protected:
DECLARE_MESSAGE_MAP()
public:
afx_msg void OnPaint();
// 画出输入框架
bool DrawInputWnd(CPaintDC *pDC);
// 背景画刷
CBrush m_brBack;
CBrush m_brSquare;
CPen m_hPen;
CRect m_rectThis;
CRect m_rectArray[LEN][LEN];
bool m_bArray[LEN][LEN];
//存储10个样本的输入和输出
E e[10];
//权值
WEIGHT WE;
bool m_bInitDraw;
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
afx_msg void OnMouseMove(UINT nFlags, CPoint point);
// 获取经过调整的输入层数值,或者样本数值
bool GetInput(int index);
// 给输入的矩阵清零,用来下次输入
BYTE m_InputArray[LEN][LEN];
//清除矩阵里的缓冲
bool ClearInput(void);
// 初始化样本
bool Initialization(void);
// 是否已经完成基本训练
bool m_bTrain;
// 关联信息文件
HANDLE m_hFile;
// 训练函数
int Training(int index);
// 识别数字
RESULT Identification(void);
private:
// 初始化权值
void InitWeight(void);
};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -