逐符号手写识别的算法是什么?

nic*_*cks 7 gesture-recognition handwriting

我认为有一些算法可以评估绘制符号与预期符号之间的差异,或类似的东西.任何帮助将不胜感激 :))

Viv*_*ath 8

您可以实现一个简单的神经网络来识别手写数字.最简单的实现类型是通过反向传播训练的前馈网络(可以随机训练或以批处理模式训练).您可以对反向传播算法进行一些改进,这将有助于您的神经网络更快地学习(动量,席尔瓦和阿尔梅达的算法,模拟退火).

至于查看真实符号和预期图像之间的差异,我见过的一种算法是k-最近邻算法.是一篇描述使用k -nearest-neighbor算法进行字符识别的文章(编辑:我之前的链接错误.我提供的链接要求你支付报纸;我试图找到一个免费版本该论文).

如果您使用神经网络识别您的角色,所涉及的步骤将是:

  1. 使用适当的训练算法设计您的神经网络.我建议从最简单的(随机反向传播)开始,然后根据需要改进算法,同时训练你的网络.
  2. 获得良好的培训数据样本.对于识别手写数字的神经网络,我使用了MNIST数据库.
  3. 将训练数据转换为神经网络的输入向量.对于MNIST数据,您需要对图像进行二值化.我使用了128的阈值.我从Otsu的方法开始,但这并没有给我我想要的结果.
  4. 创建您的网络.由于来自MNIST的图像以28x28的数组形式出现,因此您的神经网络具有784个分量和1个偏差(因此785个输入)的输入向量.我使用了一个隐藏层,其节点数按照此处列出指南设置(以及偏差).您的输出向量将包含10个组件(每个数字一个).
  5. 随机向您的网络提供训练数据(如此随机排列的数字,每个数字随机输入图像)并训练它直到达到所需的错误级别.
  6. 对您的神经网络运行测试数据(MNIST数据也随此出现),以验证它是否正确识别数字.

您可以在这里查看一个尝试识别手写数字的示例(无耻插件).我使用来自MNIST的数据训练网络.

如果您决定走这条路,那么期待花些时间让自己加快神经网络概念的速度.在我真正理解这个概念之前,我花了至少3-4天的时间阅读和编写代码.一个很好的资源是heatonresearch.com.我建议首先尝试实现神经网络来模拟AND,OR和XOR布尔运算(使用阈值激活函数).这应该让您了解基本概念.当它真正归结为训练你的网络时,你可以尝试训练一个识别XOR布尔运算符的神经网络; 这是一个开始学习算法的好地方.

在构建神经网络时,您可以使用像Encog这样的现有框架,但我发现自己构建网络要更加令人满意(您可以通过我的方式了解更多).如果你想查看一些来源,你可以查看我在github(无耻插件)上的项目,它有一些Java基础类,可以帮助你构建和训练简单的神经网络.

祝好运!

编辑

我发现了一些使用k -nearest-neighbors进行数字和/或字符识别的来源:

对于神经网络上的资源,我发现以下链接很有用: