当前位置: 首页 > 图文教程 > 开发语言 > VC++ > 简单手写体数字识别系统

VC++
使用免费界面换肤软件 USkin
Cell插件在J2EE系统中的应用
采用MFC编制MVC模式之球体演示程序
托管资源全攻略
使用 MFC 编写打印程序
根据所选择的 TrueType 字体生成点阵数据
让你的软件界面更漂亮(四):不完美之菜单
VC界面的实现
让你的软件界面更漂亮(三)
分割窗口后如何限制分割条的移动范围
关于 CFileDialog 对话框多选功能的一个问题
让你的软件界面更漂亮(二)
对话框模板,RegexTest
让你的软件界面更漂亮(一)
利用窗口子类化隐藏系统图标
KVIP考勤系统
类似于FlashGet的悬浮框的制作
计算MDI子窗口数,仅显示文件夹的打开对话框
智能ABC窗口的实现
在打开文件对话框上实现图象预览

VC++ 中的 简单手写体数字识别系统


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-30   浏览: 127 ::
收藏到网摘: n/a

简单手写体数字识别系统

作者:陈海艺 (广西工学院 计算机系)


下载源代码

摘要
  为了实现对手写字体的识别,运用了人工智能的分层神经网络思想,对识别的字体通过训练学习,达到识别手写字体的功能。

关键字 VC,人工智能,神经网络,手写识别。

1 引言

1.1 编写目的
  人工智能英文名表示是"Artificial Intelligence",简称 AI,也就是用计算机模拟人的思维和知识,通过对本系统的学习开发,对计算机人工智能和神经网络有了初步的认识,萌发初学者对人工智能和网络神经学习的基本方法和思路。

1.2 背景
  目前市面上的语音识别系统和手写识别,指纹识别系统大都建立在人工智能的神经网络技术的基础上,神经网络技术是解决识别系统难题的适当方法。

2 必备知识

2.1 vc基础
  本系统采用vc开发,所以希望读者对vc也要熟悉。

2.2神经网络
  下面我们来对神经网络技术有个大体的认识,
这里说的神经网络,实质上是指人工神经网络,是模拟生物神经元的实现,神经网络又分单层神经网络(不带输入层),和多层神经网络,实验证明,神经网络的的层数多少不影响网络对实体的识别,可能有人会问,为什么还需要多层神经网络的开发呢?答案是,适当的多层结构可以使网络的训练学习进度提高,可以更快地收敛到需要的权值上,但层数越多,或者层数不多都不足以证明能够越快地收敛到需要的权值上,这里的研究不属于我们的范畴,我们这里采用的使分层前向神经网络,结构图如下(图1)



3.算法

3.1.算法思想

  • (1)界面方面:这里我们先来熟悉一下算法的思想,为了使程序跟用户有交流界面,我们必须提供一个给用户输入的终端,这里我们用鼠标代替手写,并绘制一个输入终端用于提取我们的输入,首先子类化一个静态控件,并给重绘重载,在里面绘制控件的背景(白色),和网格线(淡青色),通过矩阵的信息进行点的重绘,响应鼠标事件,用来绘制终端的点。
  • (2)神经网络:我们这里采用了10×10的网格结构,为了是算法清晰易见,所以输入采用100个输入,事实上用到的点没有那么多,用户可以根据需要更改,中间的隐层采用5个输入,因为我们只是识别数字,所以只是有10个输出就足够了,(其实不用10个输出也可以完成任务,1010就可以标识10了,可以只要四位,但是还是那句话,为了算法清晰易见),所以神经网络的结构是100:5:10.可以通过改变源代码的define来改变网络拓扑结构。

3.2 算法描述

(1)学习

设输入层为n个输入,隐层是m个输入,输出层是p个输出

1.初始化V,W,α,ε //给V,W赋初值,这里用随机值,有经验的话可以给V和W
//赋一个近似的初值,这样的话可以加快收敛速度。
// 是学习因子,可以根据学习的进度来动态改变,这里自始
//至终取0.7, 是精度系数,

2.循环学习直到误差小于精度

e=(I,T) //对每一个样本取样放到集合e中 ,I代表输入样本,T代表输出样板

求a[j]=g(in[j])=g(//求隐层的值,其中V是各个权值的向量,
                                    //I是样板值
o[i]=g(in[i])=g(//求输出层的值,其中W是各个隐层输入的
                                  //权值,a[j]是输入的隐层的值

Err[i]=T[i]-O[i] (1<=i<=p) //Err是误差值求 Δ[i]=Err[i]*g`(in[i]) (1<=i<=p) //g`(in[i]