计算机模式识别论文手写数字识别.docx
《计算机模式识别论文手写数字识别.docx》由会员分享,可在线阅读,更多相关《计算机模式识别论文手写数字识别.docx(11页珍藏版)》请在冰豆网上搜索。
计算机模式识别论文手写数字识别
模式识别课程论文
题目:
手写数字的识别研究
一、题目概述
数字识别处理的信息主要包括数据信息,主要是由阿拉伯数字及少量特殊符号组成的各种编号和统计数据,如:
邮政编码、统计报表、财务报表、银行票据等等,处理这类信息的核心技术是手写数字识别。
作为模式识别的重要应用之一,手写数字的识别已经成为新的研究方向。
手写数字识别技术是近年来研究的热点,具有广泛的应用前景,同时也是一个非常具有挑战性的课题。
人工神经网络是当今智能控制领域最活跃的分支之一,它所具有的并行计算能力、容错能力、泛化能力,以及以任意精度逼近未知非线性对象的特点,使其为手写数字的识别提供了一种新的方法。
手写数字识别是光学字符识别技术的一个分支,它研究的对象是如何利用计算机自动辨认人手写在纸张上的阿拉伯数字。
在整个光学字符识别领域中,最为困难的就是脱机手写字符的识别。
到目前为止,尽管人们在脱机手写英文、汉字识别的研究中己取得很多可喜成就,但距离实用还有一定距离。
随着信息社会步伐的加快,对字符识别技术的需求越来越迫切,要求也越来越高了,从目前水平看,计算机离线文字识别技术离达到令人满意的使用要求还有相当距离。
随着我国国民经济信息网络的推广,全国有大量的数据要输入计算机网络,邮件分拣系统与税务统计系统即为典型的数字识别系统[l闷。
而且在当今这个快节奏的现代生活中,与数字打交道的机会越来越多,数字识别面对的都是极其大量的数据报表等,其在精度和速度方面都对识别要求提出了很大的挑战。
设想在金融报表中,把300,000元认成800,000元,从字符上辨认只是一字之差,可对于金融业来说,这是绝对不允许的。
二、模式识别与BP神经网络
模式识别是人工智能领域应用的基础,它利用计算机和光学系统来识别计算机“看到”的图像信息,模拟人的视觉;用计算机和声音传感器来识别计算机接收到的声波信息,模拟人的听觉;用计算机通过压力、温度、气体、液体等传感器来识别计算机获得的各种特征信息,模拟人的触觉和嗅觉等功能。
实际上人类在日常生活的每个环节,都从事着模式识别的活动,例如将手写的数字分到具体的数字类别中的手写数字识别;判断是否有汽车闯红灯、识别闯红灯的汽车车牌号码的智能交通管理系统等。
它由数据获取、预处理、特征提取、分类决策及分类器设计五部分组成。
一般分为上下两部分,上半部分完成未知类别模式的分类:
下半部分属于设计分类器的训练过程,利用样品进行训练,确定分类器的具体参数,完成分类器的设计。
而分类决策在识别过程中起作用,对待识别的样品进行分类决策,其关键是解决如何用计算机对样品进行分类。
神经网络的概念、原理和设计是受生物、特别是人脑神经系统的启发提出的.神经网络由大量简单的处理单元来模拟真实人脑神经网络的机构和功能以及若干基本特性,是一个高度复杂的非线性自适应动态处理系统.BP网络是1986年由Rinehart和McCelland为首的科学家小组提出,是一种按误差逆传播算法训练的多层前馈网络,是目前应用最广泛的神经网络模型之一.BP网络能学习和存贮大量的输入-输出模式映射关系,而无需事前揭示描述这种映射关系的数学方程.它的学习规则是使用最速下降法,通过反向传播来不断调整网络的权值和阈值,使网络的误差平方和最小.BP神经网络模型拓扑结构包括输入(input)、隐层(hidelayer)和输出层(outputlayer),如图1所示:
三、基于BP神经网络的手写数字识别
3.1 输入向量与目标向量
首先对手写数字图像进行预处理,包括二值化、去噪、倾斜校正、归一化和特征提取,生成BP神经网络的输入向量Alphabet和目标向量Tar2get.其中Alphabet选取40×10的矩阵,第1列到第10列代表0~9的数字.Target为10×10的单位矩阵,每个数字在其所排顺序位置输出1,其他位置输出0.
3.2 BP神经网络的构建
BP算法由数据流的前向计算(正向传播)和误差信号的反向传播两个过程构成.正向传播时,传播方向为输入层→隐层→输出层,每层神经元的状态只影响下一层神经元.若在输出层得不到期望的输出,则转向误差信号的反向传播流程.通过这两个过程的交替进行,在权向量空间执行误差函数梯度下降策略,动态迭代搜索一组权向量,使网络误差函数达到最小值,从而完成信息提取和记忆过程.首先考虑正向传播,设输入层有n个节点,隐层有p个节点,输出层有q个节点.输入层与隐层之间的权值为vki,隐层与输出层之间的权值为wjk.隐层的传递函数为f1(x),输出层的传递函数为f2(x),则隐层节点的输出为
输出层节点的输出为
通过式
(1)和
(2)可得BP神经网络完成n维到q维的映射.其次考虑反向传播.在反向传播中,需要对不理想的权值进行调整,BP神经网络的核心要务即在于调权.定义误差函数,设输入P个学习样本,用x1,x2,⋯,xp来表示.第p个样本输入网络得到
输出ypj(j=1,2,⋯,q),其误差为
式中
为期望输出.P个样本的全局误差为将式
(3)代入得
输出层权值的变化采用累计误差BP算法调整wjk使全局误差E变小,即
式(5)中η为学习率.现定义误差信号为
将式(3)代入可得第一项为
第二项为输出层传递函数f2(x)的偏微分
将式(7)和(8)代入可得误差信号为
则输出层各神经元权值△wjk调整公式将式(9)代入可定义为
在得到输出层权值调整公式后,需要定义隐层权值△vki调整公式
根据输出层各神经元权值△wjk调整公式推导过程,可得△vki为
.
四、BP算法的实现程序代码
以VC++为手段,在BP神经网络的基础上进行编程以实现手写数字的识别,以下是部分实验代码:
1.// MainFrm.cpp :
implementation of the CMainFrame class
2.// 2005.1.13-16:
02 By Superman
3.
4.#include "stdafx.h"
5.#include "DSPLIT.h"
6.
7.#include "MainFrm.h"
8.#include "DynSplitView2.h"
9.
10.#ifdef _DEBUG
11.#define new DEBUG_NEW
12.#undef THIS_FILE
13.static char THIS_FILE[] = __FILE__;
14.#endif
15.
16./////////////////////////////////////////////////////////////////////////////
17.// CMainFrame
18.
19.IMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd)
20.
21.BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
22. //{{AFX_MSG_MAP(CMainFrame)
23. ON_WM_CREATE()
24. //}}AFX_MSG_MAP
25.END_MESSAGE_MAP()
26.
27.static UINT indicators[] =
28.{
29. ID_SEPARATOR, // status line indicator
30. ID_INDICATOR_CAPS,
31. ID_INDICATOR_NUM,
32. ID_INDICATOR_SCRL,
33.};
34.
35./////////////////////////////////////////////////////////////////////////////
36.// CMainFrame construction/destruction
37.
38.CMainFrame:
:
CMainFrame()
39.{
40. // TODO:
add member initialization code here
41.
42.}
43.
44.CMainFrame:
:
~CMainFrame()
45.{
46.}
47.
48.int CMainFrame:
:
OnCreate(LPCREATESTRUCT lpCreateStruct)
49.{
50. if (CFrameWnd:
:
OnCreate(lpCreateStruct) == -1)
51. return -1;
52.
53. if (!
m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
54. | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
55. !
m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
56. {
57. TRACE0("Failed to create toolbar\n");
58. return -1; // fail to create
59. }
60.
61. if (!
m_wndStatusBar.Create(this) ||
62. !
m_wndStatusBar.SetIndicators(indicators,
63. sizeof(indicators)/sizeof(UINT)))
64. {
65. TRACE0("Failed to create status bar\n");
66. return -1; // fail to create
67. }
68.
69. // TODO:
Delete these three lines if you don't want the toolbar to
70. // be dockable
71. m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
72. EnableDocking(CBRS_ALIGN_ANY);
73. DockControlBar(&m_wndToolBar);
74.
75. return 0;
76.}
77.
78.BOOL CMainFrame:
:
PreCreateWindow(CREATESTRUCT& cs)
79.{
80. if( !
CFrameWnd:
:
PreCreateWindow(cs) )
81. return FALSE;
82. // TODO:
Modify the Window class or styles here by modifying
83. // the CREATESTRUCT cs
84.
85. return TRUE;
86.}
87.
88./////////////////////////////////////////////////////////////////////////////
89.// CMainFrame diagnostics
90.
91.#ifdef _DEBUG
92.void CMainFrame:
:
AssertValid() const
93.{
94. CFrameWnd:
:
AssertValid();
95.}
96.
97.void CMainFrame:
:
Dump(CDumpContext& dc) const
98.{
99. CFrameWnd:
:
Dump(dc);
100.}
101.
102.#endif //_DEBUG
103.
104./////////////////////////////////////////////////////////////////////////////
105.// CMainFrame message handlers
106.
107.
108.BOOL CMainFrame:
:
OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
109.{
110. // create a splitter with 1 row, 2 columns
111. if (!
m_wndSplitter.CreateStatic(this, 1, 2))
112. {
113. TRACE0("Failed to Splitter window\n");
114. return FALSE;
115. }
116.
117. // add the first splitter pane - the default view in column 0
118. if (!
m_wndSplitter.CreateView(0, 0,
119. pContext->m_pNewViewClass, CSize(320, 150), pContext))
120. {
121. TRACE0("Failed to create first pane\n");
122. return FALSE;
123. }
124.
125. // add the second splitter pane - an input view in column 1
126. if (!
m_wndSplitter.CreateView(0, 1,
127. RUNTIME_CLASS(CDynSplitView2), CSize(0, 0), pContext))
128. {
129. TRACE0("Failed to create second pane\n");
130. return FALSE;
131. }
132.
133. // activate the input view
134. SetActiveView((CView*)m_wndSplitter.GetPane(0,0));
135.
136. return TRUE;
137.}
编程结束后,利用鼠标在屏幕上移动形成手写数字,由程序负责进行识别。
下图为演示结果:
五、结果与分析
神经网络的训练过程是识别字符的基础,十分重要,直接关系到识别率的高低.输送训练样本至BP神经网络训练,在梯度方向上反复调整权值使网络平方和误差最小.为使网络对输入向量有一定鲁棒性,可先用无噪声的样本对网络进行训练,直到其平方和误差最小,再用含噪声的样本进行训练,保证网络对噪声不敏感.训练完毕,把待识别数字送BP神经网络中进行仿真测试
权值初始化为(-1,1)之间的随机数,期望误差为0.01,最大训练步数5000,动量因子为0.95,隐层和输出层均采用“logsig”函数,手写数字的识别结果如图2(a)~(e)所示,以数字4为例给出处理过程
对1000个手写数字(每个数字取100幅不同的图像)进行识别,其识别结果如表1所示.
六、结论
针对传统的手写数字识别中识别率和可靠性不高的情况,提出了将BP神经网络应用于数字识别,并通过实验,证实BP神经网络算法识别率较高,具备可行性.。
随着国家信息化进程的加速,手写数字识别的应用需求将越来越广泛,因此应当加强这方面的研究工作。
应用系统的性能的关键与瓶颈仍然在于手写数字识别核心算法性能上,最终目标是研究零误识率和低拒识率的高速识别算法。
在实际应用中,没有任何一种方法可以达到100%的识别正确,我们要做的是充分发掘新的、更适宜实际问题的算法,以便能尽可能好地解决实际的手写识别问题,使该技术得到最大程度的应用。
参考文献.
(1) 张猛等.手写体数字识别中图像预处理的研究[J].微计算机信息,2006
(2) PandyaAS,MacyRB.神经网络模式识别及其实现[M].徐勇,荆涛译.北京:
电子工业出版社,1999.
(3) 朱小燕等.手写体字符识别研究[J].模式识别与人工智能,2000
(4) 马少平等.基于模糊方向线索特征的手写体汉字识别[J].清华大学学报,1997
(5)边肇祺张学工《模式识别》,清华大学出版社
(6)蔡自兴,徐光祜编著人工智能及其应用清华大学出版社