从哪里开始使用神经网络进行手写识别?

时间:2009-12-28 08:08:01

标签: java neural-network ocr handwriting

我一直在努力学习神经网络一段时间,我可以在线了解一些基础教程。现在我想用神经网络开发在线手写识别。所以我不知道从哪里开始?我需要一个非常好的指导。最后我是java程序员。

你建议我做什么?

11 个答案:

答案 0 :(得分:15)

Unipen数据库上使用字符识别开始简单。

您需要从原始轨迹数据中提取相关要素,以形成通常称为“特征向量”的东西。例如,您可以使用插值方案重新采样数据,最终得到n个元组,每个元组包含以下信息:

  • 位置
  • 取向
  • 速度
  • 加速度
  • 曲率

一旦有了固定大小的特征向量,就可以将它用作神经网络的输入。尝试使用MLP网络。

您必须进行试验才能确定哪些功能最佳。

如果您需要开始从Ink数据中提取特征,请查看HP's Lipi Toolkit(请注意,他们的识别器不使用神经网络)。

您还可以查看此15 Steps to Implement a Neural Network tutorial

答案 1 :(得分:11)

Introduction To Neural Networks for Java是一本很好的入门书,包括一个手写识别示例。

alt text

答案 2 :(得分:3)

看看网上浮动的一些项目:

仅列出Google为“java handwriting recognition

发出的三个第一个链接

一些提示可以帮助您入门:

  • 如果可以的话,使用矢量而不是位图图形。理想情况下,您应该具有每个笔划的速度和方向。通过曲线弯曲的方式加上绘制的速度而不是表格来识别字母通常更简单。

  • 使用多种方法解决问题。使用神经网络,形状识别,大小,上一个和下一个字母,词典。所有这些都会给你不同的错误级别的结果。这有助于大大改善结果。

祝你好运!

答案 3 :(得分:3)

彼得·诺维格的Artificial Intelligence: A Modern Approach是关于一般人工智能的好书,并解释了很多关于基础知识的内容,还有一个关于背向传播神经网络的部分。

要训练您的神经网络,您需要数据集。

THE MNIST DATABASE of handwritten digits上的Pen-Based Recognition of Handwritten Digits Data SetUCI Machine Learning Repository

UCI ML存储库有很多很棒的数据集,其中很多都可以很好地训练神经网络。即使你不知道它们是什么,你也可以抓住一些,看看你的ML系统是否可以完成分类任务。看看Classification tasks with a large number of attributes and instances,虽然你可以在开始时尝试较小的那些。

顺便说一句,除了神经网络之外还有很多技术,包括Support Vector Machines,这些技术很受欢迎。

答案 4 :(得分:2)

请记住,如果您的目标是实际识别这些角色,您的表现将根据输入要素的质量和选择而出现下降

选择正确的功能,并尽可能多地预处理(即去除噪声功能,无关数据,重复或强相关功能)至关重要。根据我的经验,你可以从最无聊,最简单的近邻实现中获得更好的性能,而不是选择功能较少的尖端算法。

对于你来说,这意味着延迟阅读现在的神经网络文献(先拿一些现成的黑盒子实现),然后阅读实际系统使用的图像处理等等。如果您的数据可以包含压力和速度信息,那就更好了。像LDA热图这样的东西可以说明最初看哪些特征重要,哪些不重要。

对于基本分类,有很多不错的算法。大部分工作都很好,对你来说效果很好。困难的部分不是挑选或调整算法,而是避免垃圾中的垃圾场景。

答案 5 :(得分:1)

Heaton研究将为您提供很多帮助

http://www.heatonresearch.com/articles/7/page3.html - 使用示例代码段访问此教程

答案 6 :(得分:0)

神经网络[如果我没有记错]会解释模式, 您为程序提供输入,程序在一组存储中搜索该模式 模式和基于匹配提供了可能的匹配。

在您的情况下,模式的尺寸可以是速度+方向等数据 或只是方向等

我做了一个神经机器人的小模拟,以类似的方式在我的网站上聊天。

节目“学习”的模式越多,它提供的答案就越准确。

答案 7 :(得分:0)

神经网需要大量的浸泡时间。这些概念很容易理解,但对于初学者来说,这些概念可能会让人不知所措。

看看JochenFröhlich用neural networks in Java做了些什么。这听起来像是像你这样的Java程序员的理想起点。

答案 8 :(得分:0)

答案 9 :(得分:0)

如果您正在寻找概念,我建议使用BrainNet,

神经网络 - 第一部分:.NET中的简单手写识别系统

http://amazedsaint.blogspot.com/2008/01/neural-networks-part-i-simple.html

  

BrainNet将帮助您

     
      
  • 获得关于神经元和神经网络的公平理解
  •   
  • 获得有关智能系统的良好概念
  •   
  • 了解如何使用此神经网络库在您的神经网络中使用它   项目。
  •   
  • 了解如何开发一些很酷的神经网络程序
  •   

答案 10 :(得分:0)

我建议您从手写数字识别开始,原因如下:

  • 任务定义明确
  • 上面提到了一个非常好的手写数字数据库(MNIST
  • 在此问题上测试了很多实现的算法
  • 这个问题最成功的方法之一是卷积神经网络,甚至用于商业应用。可用的实现很少,包括C ++,CUDA,Matlab,Python。不幸的是,我不知道任何Java实现。