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

Posted

技术标签:

【中文标题】从哪里开始使用神经网络进行手写识别?【英文标题】:Where to start Handwritten Recognition using Neural Network? 【发布时间】:2010-12-30 10:09:23 【问题描述】:

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

你建议我做什么?

【问题讨论】:

【参考方案1】:

从Unipen 数据库上的字符识别开始。

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

位置 方向 速度 加速 曲率 等

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

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

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

你也可以看看这个15 Steps to Implement a Neural Network tutorial。

【讨论】:

很抱歉,我不能说太多:/因为保密协议【参考方案2】:

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

【讨论】:

该示例使用 Kohonen 网络,但准确性较差【参考方案3】:

看看网上流传的一些项目:

Neural Network Handwriting Recognition Applet Handwriting Recognition in Java Technology Handwriting recognition

仅列出 Google 为“java handwriting recognition”提供的前三个链接

一些帮助您入门的提示:

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

用多种方法解决问题。使用神经网络、形状识别、大小、上一个和下一个字母、字典。所有这些都会为您提供具有不同错误级别的不同结果。这可以极大地帮助改善结果。

祝你好运!

【讨论】:

【参考方案4】:

Peter Norvig 的 Artificial Intelligence: A Modern Approach 是一本关于通用 AI 的好书,解释了很多基础知识,其中有一节是关于反向传播神经网络的。

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

THE MNIST DATABASE of handwritten digits 或 Pen-Based Recognition of Handwritten Digits Data Set 位于 UCI Machine Learning Repository

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

顺便说一句,除了神经网络,还有很多技术,包括流行的Support Vector Machines。

【讨论】:

【参考方案5】:

请记住,如果您的目标是真正识别这些字符,您的表现将取决于输入特征的质量和选择

选择正确的特征并尽可能多地进行预处理(即去除噪声特征、无关数据、重复或强相关特征)是绝对关键的。以我的经验,你会从具有良好特征的最无聊和最简单的最近邻实现中获得更好的性能,而不是从具有较少选择的特征的尖端算法中获得更好的性能。

对你来说,这意味着 暂时推迟阅读神经网络文献(先拿一些现成的黑盒实现)并阅读实际系统使用什么样的图像处理等.如果您的数据可以包含压力和速度信息,那就更好了。 LDA 热图之类的东西可以说明性地初步了解哪些特征重要,哪些不重要。

对于基本分类,有很多不错的算法。大多数工作都很好,对你也很好。困难的部分不在于选择或调整算法,而在于避免垃圾进垃圾出场景。

【讨论】:

【参考方案6】:

Heaton 研究对您有很大帮助

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

【讨论】:

【参考方案7】:

神经网络 [如果我没记错的话] 将致力于解释模式, 您向程序提供输入,程序在一组存储的 模式并根据匹配提供可能的匹配。

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

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

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

【讨论】:

【参考方案8】:

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

看看 Jochen Fröhlich 对 neural networks in Java 所做的事情。对于像您这样的 Java 程序员来说,这听起来是一个理想的起点。

【讨论】:

【参考方案9】:

书籍:Character Recognition Systems: A Guide for Students and Practitioners 和 Recognition of Whiteboard Notes: Online, Offline and Combination 是很好的起点。

【讨论】:

【参考方案10】:

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

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

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

BrainNet 将帮助您

大致了解神经元和神经网络 获得有关智能系统的良好概念 了解如何使用此神经网络库,以便在您的 项目。 了解如何开发一些很酷的神经网络程序

【讨论】:

【参考方案11】:

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

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

【讨论】:

以上是关于从哪里开始使用神经网络进行手写识别?的主要内容,如果未能解决你的问题,请参考以下文章

利用pytorch CNN手写字母识别神经网络模型识别多手写字母(A-Z)

人工智能实战2——从0开始手写符号识别

使用Keras训练Lenet网络来进行手写数字识别

神经网络之手写数字识别

第6章 识别手写字体

数据挖掘入门系列教程之使用神经网络(基于pybrain)识别数字手写集MNIST