【VC++开源代码栏目提醒】:网学会员VC++开源代码为您提供简单手写体数字识别系统 - 互联网参考,解决您在简单手写体数字识别系统 - 互联网学习中工作中的难题,参考学习。
简单手写体数字识别系统 简单手写体数字识别系统2010-04-29 1003 下载源
代码摘要为了实现对手写字体的识别运用了人工智能的分层神经网络思想对识别的字体通过训练学习达到识别手写字体的功能。
关键字
VC人工智能神经网络手写识别。
1引言1.1编写目的人工智能英文名表示是Artificial Intelligence简称AI也就是用计算机模拟人的思维和知识通过对本系统的学习开发对计算机人工智能和神经网络有了初步的认识萌发初学者对人工智能和网络神经学习的基本方法和思路。
1.2背景目前市面上的语音识别系统和手写识别指纹识别系统大都建立在人工智能的神经网络技术的基础上神经网络技术是解决识别系统难题的适当方法。
2必备知识2.1
vc基础本系统采用
vc开发所以希望读者对
vc也要熟悉。
2.2神经网络下面我们来对神经网络技术有个大体的认识这里说的神经网络实质上是指人工神经网络是模拟生物神经元的实现神经网络又分单层神经网络不带输入层和多层神经网络实验证明神经网络的的层数多少不影响网络对实体的识别可能有人会问为什么还需要多层神经网络的开发呢答案是适当的多层结构可以使网络的训练学习进度提高可以更快地收敛到需要的权值上但层数越多或者层数不多都不足以证明能够越快地收敛到需要的权值上这里的研究不属于我们的范畴我们这里采用的使分层前向神经网络结构图如下图13.算法3.1.算法思想 1界面方面这里我们先来熟悉一下算法的思想为了使程序跟用户有交流界面我们必须提供一个给用户输入的终端这里我们用鼠标代替手写并绘制一个输入终端用于提取我们的输入首先子类化一个静态控件并给重绘重载在里面绘制控件的背景白色和网格线淡青色通过矩阵的信息进行点的重绘响应鼠标事件用来绘制终端的点。
2神经网络我们这里采用了10×10的网格结构为了是算法清晰易见所以输入采用100个输入事实上用到的点没有那么多用户可以根据需要更改中间的隐层采用5个输入因为我们只是识别数字所以只是有10个输出就足够了其实不用10个输出也可以完成任务1010就可以标识10了可以只要四位但是还是那句话为了算法清晰易见所以神经网络的结构是100510.可以通过改变源
代码的define来改变网络拓扑结构。
3.2算法描述1学习设输入层为n个输入隐层是m个输入输出层是p个输出1.初始化VWαε//给VW赋初值这里用随机值有经验的话可以给V和W//赋一个近似的初值这样的话可以加快收敛速度。
//是学习因子可以根据学习的进度来动态改变这里自始//至终取0.7是精度系数2.循环学习直到误差小于精度 eIT//对每一个样本取样放到集合e中I代表输入样本T代表输出样板求ajginjg//求隐层的值其中V是各个权值的向量//I是样板值oiginig//求输出层的值其中W是各个隐层输入的//权值aj是输入的隐层的值 ErriTi-Oi1ip//Err是误差值 求ΔiErrigini1ip//gini是gini函数的求导 WjiWjiajErrigini//权值调整即训练学习是学习因子用 //来反映学习的频率可以自己根据程序需要来定这里遇到一个难题是隐层的误差值怎么求因为输出层有准确的输出值作参考所以能够求到误差值但是隐层没有相应的准确值。
我们可以观察输出层的误差值这个值其实蕴涵了隐层的误差值所在经过证明可以用下面公式获取误差值。
Errj//Err1jP是输出层的误差这里 //利用这个误差蕴涵的信息来获取隐 //层的误差 VkjVkjIkErrjginj//隐层权值修正3.返回VW学习完成可能有些人不明白函数gx是如何选取根据我们识别的特性来看我们应该选择S型函数关于函数的类型请参阅其他书籍考虑函数的导数在内应该选择一个比较好导的函数。
所以我们选择。
yfA1/1Exp-A yfAy1-y2实现识别1.获取输入层的各个值a ajginjg把P改成m//求隐层的值其中V是各个权值//的向量oiginig//求输出层的值其中W是各个隐层输入的 ErriTi-Oi2/2 //为精度如果全局误差都小于精度就//证明输出的矩阵O是合法的。
//ε为精度如果全局误差都小于精度就//证明输出的矩阵O是合法的。
3.3算法实现设输入层为n个输入隐层是m个输入输出层是p个输出。
这里是一次训练的算法程序可以根据自己需要实现。
INPUT WVPA//输入权值WV精度P和学习系数A INPUT i1.int1.t //输入和输出样板集 Step 1Set v_sum0.//设定累加器 Step 2Set in_imin_j Step 3For j1.m do Step 4and Step 5Step 7 Step 4Set in_jj0//初始化 Step 5For k1.n do Step6 and Step7 Step 6Set in_jjajvkjik Step 7Set aj1/1-Exp-in_jj Step 8For i1.p do Step9 and Step 10Step 12 Step 9Set in_ii0 Step 10 For j1.m do Step 11 Step 11 Set in_iiin_iiwjiaj Step 12 Set oi1/1-Exp-in_ii Step 13 For i1.p do Step 14 Step 14 Set Erriti-oi//误差 Step 15 For j1.m do Step 16 Step 16 For i1.p do Step 17 Step 17 Set wjiwjiAajErri1/1-Exp-in_jj1-1/1-Exp-in_jj//输出层权 //值修正 Step 18 For k1.n do Step 19 Step 19 For j1.m do Step 20 Step 20 Set vkjvkjAikErrj1/1-Exp-in_jj1-1/1-Exp-in_jj//隐层权值 //修正 Step 21 OUTPUTErr1.Err STOP重复训练过程来对准确权值的收敛识别过程是学习过程的一部分所以这里不再重复3.4终端处理位置居中要使识别系统能够处理同一个输入终端但是有坐标偏移的问题要作一些坐标转换就是先获取中点坐标然后根据中点坐标的偏移来平移注意这里的平移包括样本和输入层的点都要作平移。
具体实现请参见附件的源
代码4.实现效果采样效果训练后的识别效果5.总结通过对手写数字识别系统的开发熟悉了人工神经网络的基本工作方式神经网络有很多种每一种都有自己的特点和功能人工神经网络还可以拓展到其他领域我国的人工智能研究起步比较迟还需要很大的努力才能跟上其他发达国家的水平。
上一篇:
unix系统操作命令大全2
下一篇:
电话销售英文简历范文