一段时间以来,我一直在尝试学习神经网络,并且可以在线了解一些基础教程。现在我想使用神经网络开发在线手写识别。所以我不知道从哪里开始?我需要一个很好的指导。最后我是java程序员。
你建议我怎么做?
一段时间以来,我一直在尝试学习神经网络,并且可以在线了解一些基础教程。现在我想使用神经网络开发在线手写识别。所以我不知道从哪里开始?我需要一个很好的指导。最后我是java程序员。
你建议我怎么做?
从Unipen数据库上的字符识别开始。
您需要从原始轨迹数据中提取相关特征,以形成通常所说的“特征向量”。例如,您可以使用插值方案重新采样数据以得到 n 个元组,每个元组包含以下信息:
一旦有了固定大小的特征向量,就可以将其用作神经网络的输入。尝试 MLP 网络作为开始。
您必须进行试验才能确定哪些功能最好。
如果您需要开始从 Ink 数据中提取特征,请查看HP 的 Lipi Toolkit(请注意,他们的识别器虽然不使用神经网络)。
您还可以查看实现神经网络的 15 个步骤教程。
Introduction To Neural Networks for Java是一本很好的入门书籍,其中包含一个手写识别示例。
看看网上流传的一些项目:
仅列出 Google 为“ java 手写识别”吐出的前三个链接
一些帮助您入门的提示:
如果可以,请使用矢量而不是位图图形。理想情况下,您应该知道每个笔划的速度和方向。通过曲线弯曲的方式以及绘制它的速度而不是形状来识别字母通常更简单。
用几种方法解决问题。使用神经网络、形状识别、大小、上一个和下一个字母、字典。所有这些都会为您提供具有不同错误级别的不同结果。这可以极大地帮助改善结果。
祝你好运!
Peter Norvig 的《人工智能:一种现代方法》是一本关于一般人工智能的好书,解释了很多基础知识,还有一节是关于反向传播神经网络的。
要训练您的神经网络,您需要数据集。
有手写数字的 MNIST 数据库,或UCI 机器学习存储库中的基于笔的手写数字识别数据集
UCI ML 存储库有很多很棒的数据集,其中很多都可以很好地训练神经网络。即使你不知道它们是关于什么的,你也可以拿一些来看看你的 ML 系统是否可以完成分类任务。查看具有大量属性和实例的分类任务,尽管您在开始时也可以尝试较小的任务。
顺便说一句,除了神经网络之外,还有很多技术,包括流行的支持向量机。
请记住,如果您的目标是真正识别这些字符,那么您的表现将取决于输入特征的质量和选择。
选择正确的特征并尽可能多地进行预处理(即去除噪声特征、无关数据、重复或强相关特征)是绝对关键的。以我的经验,你会从具有良好特性的最无聊和最简单的最近邻实现中获得更好的性能,而不是从具有较少选择的特性的尖端算法中获得更好的性能。
对你来说,这意味着暂时推迟阅读神经网络文献(先拿一些现成的黑盒实现)并阅读实际系统使用什么样的图像处理等。如果您的数据可以包含压力和速度信息,那就更好了。像 LDA 热图这样的东西可以说明最初看到哪些特征重要,哪些不重要。
对于基本分类,有很多不错的算法。大多数工作都很好,对你也很好。困难的部分不是挑选或调整算法,而是避免垃圾进垃圾出场景。
希顿研究会帮助你很多
http://www.heatonresearch.com/articles/7/page3.html - 使用示例代码片段访问此教程
神经网络 [如果我没记错的话] 将用于解释模式,您向程序提供输入,程序在一组存储的模式中搜索该模式,并根据匹配提供可能的匹配。
在您的情况下,图案的尺寸可以是速度+方向或仅方向等数据
我对一个在我的网站上以类似方式聊天的神经机器人做了一个小型模拟。
程序“学习”的模式越多,它提供的答案就越准确。
神经网络需要大量的浸泡时间。这些概念很简单,但对初学者来说可能是压倒性的。
看看 Jochen Fröhlich在 Java 中使用神经网络所做的工作。对于像您这样的 Java 程序员来说,这听起来是一个理想的起点。
书籍:字符识别系统:学生和从业人员指南和白板笔记识别:在线、离线和组合是很好的起点。
如果你正在寻找概念,我建议 BrainNet,
神经网络 - 第 I 部分:.NET 中的简单手写识别系统
http://amazedsaint.blogspot.com/2008/01/neural-networks-part-i-simple.html
BrainNet 将帮助您
- 获得有关神经元和神经网络的公平理解
- 获得有关智能系统的良好概念
- 了解如何使用此神经网络库以在您的项目中使用它。
- 了解如何开发一些很酷的神经网络程序
我建议你从手写数字识别开始,原因如下: