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

发布于 2024-08-16 12:10:49 字数 112 浏览 6 评论 0 原文

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

你建议我做什么?

I've been trying to learn about Neural Networks for a while now, and I can understand some basic tutorials online. Now i want to develop online handwritten recognition using Neural Network. So i haven't any idea where to start? And i need a very good instruction. In finally i'm java programmer.

What do you suggest I do?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(11

陌上芳菲 2024-08-23 12:10:49

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

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

  • 位置
  • 、方向、
  • 速度、
  • 加速度、
  • 曲率
  • 等。

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

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

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

您还可以看看这个 实现神经网络教程的 15 个步骤

Start simple with character recognition on the Unipen database.

You will need to extract pertinent features out of raw trajectory data in order to form what's commonly called a "feature vector". For instance you could resample the data using an interpolation scheme to end up with n tuples, each tuple containing information such as:

  • position
  • orientation
  • velocity
  • acceleration
  • curvature
  • etc

Once you have a fixed size feature vector, you use it as the input to your neural network. Try MLP networks for a start.

You will have to experiment in order to decide which features are best.

If you need to get started on extracting features from Ink data, have a look at HP's Lipi Toolkit (note that their recognizers don't use neural networks though).

You can also have a look at this 15 Steps to Implement a Neural Network tutorial.

遮云壑 2024-08-23 12:10:49

Java 神经网络简介是一本很好的入门书,包括一个手写识别示例。

替代文本

Introduction To Neural Networks for Java is a good introductory book and includes a handwriting recognition example.

alt text

七七 2024-08-23 12:10:49

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

仅列出Google 为“java 手写识别”吐出的三个第一个链接

一些提示入门指南:

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

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

祝你好运!

Have a look at some of the project floating around the net:

To list just the three first links Google spits out for "java handwriting recognition"

Some hints to get you started:

  • If you can, work with vectors instead of bitmap graphics. Ideally, you should have the speed and direction of each stroke. It's often more simple to recognize a letter by the way in which a curve bends plus the speed at which it was drawn instead of the form.

  • Attack the problem with several approaches. Use neural networks, shape recognition, size, previous and next letter, dictionaries. All of them will give you different results with different error levels. This can help greatly to improve the results.

Good luck!

咋地 2024-08-23 12:10:49

Peter Norvig 的人工智能:一种现代方法是一本关于通用人工智能和人工智能的好书解释了很多基础知识,并且有一个关于反向传播神经网络的部分。

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

MNIST 数据库
手写数字
,或 UCI 机器学习存储库<中基于笔的手写数字数据集识别 /a>

UCI ML 存储库拥有大量出色的数据集,其中许多数据集非常适合训练神经网络。即使您不知道它们的含义,您也可以获取一些并看看您的 ML 系统是否可以执行分类任务。看看 具有大量属性和实例的分类任务,尽管您在开始时也可以尝试较小的属性和实例。

顺便说一句,除了神经网络之外,还有很多其他技术,包括支持向量机,很受欢迎。

Peter Norvig's Artificial Intelligence: A Modern Approach is a good book on general AI and explains a lot about the basics, and there is a section on Back Propagation neural networks.

To train your neural network you'll need datasets.

There's THE MNIST DATABASE
of handwritten digits
, or the Pen-Based Recognition of Handwritten Digits Data Set at the UCI Machine Learning Repository

The UCI ML repository has lots of great datasets, many of which would be good to train neural networks. Even if you don't know what they're about you can grab some and see if your ML system can do the classification tasks. Look at Classification tasks with a large number of attributes and instances, although you can try smaller ones too when you start out.

By the way, there are a lot more techniques besides neural networks, including Support Vector Machines, which are popular.

满身野味 2024-08-23 12:10:49

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

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

对于您来说,这意味着现在要延迟阅读神经网络文献(首先需要一些现成的黑盒实现)并阅读真实系统使用的图像处理等类型。如果您的数据可以包括压力和速度信息,那就更好了。像 LDA 热图这样的东西可以说明性地初步了解哪些功能重要,哪些功能不重要。

对于基本分类,有大量不错的算法。大多数工作都很好,并且对您来说也很好。困难的部分不在于选择或调整算法,而在于避免垃圾进垃圾出的情况。

Bear in mind that if your aim is to actually recognize these characters, your performance will stand and fall based on the quality and selection of the input features.

It is absolutely critical to choose the right features, and to preprocess (i.e. get rid of noise features, extraneous data, duplicate or strongly correlated features) as much as you can. In my experience, you'll get much better performance from the most boring and plain nearest neighbour implementation with good features than from a cutting edge algorithm with less well selected features.

For you, that means delaying reading the neural net literature for now (just take some off the shelf black-box implementation first) and reading up on what kind of image processing etc. real systems use. If your data can include pressure and speed info, all the better. Something like an LDA heatmap can be illustrative to initially see which features matter, and which don't.

For basic classification, there are tons of decent algorithms. Most work just fine and will work just fine for you. The difficult part isn't in picking or tweaking the algorithm, it's in avoiding the garbage-in-garbage-out scenario.

烟雨凡馨 2024-08-23 12:10:49

Heaton 研究会对您有很大帮助

http://www.heatonresearch.com/articles/7/ page3.html - 访问此处获取包含示例代码片段的教程

Heaton research will help you a lot

http://www.heatonresearch.com/articles/7/page3.html - visit this for tutorial with sample code snippets

苏大泽ㄣ 2024-08-23 12:10:49

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

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

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

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

Neural network [if i am not mistaken] would work on interpreting patterns,
You provide inputs to your program and the program searches that pattern in a set of stored
patterns and based on the match provides a possible match.

In your case, the dimensions for the patterns could be data such as speed + direction
or only direction, etc

I made a small simulation of a neural bot that chats on my site in a similar fashion.

The more patterns the program 'Learns', the more accurate answers it provides.

等风来 2024-08-23 12:10:49

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

看看 Jochen Fröhlich 使用 Java 神经网络 所做的工作。对于像您这样的 Java 程序员来说,这听起来像是一个理想的起点。

Neural nets need a lot of soak time. The concepts are easy enough, but they can be overwhelming to the beginner.

Take a look at what Jochen Fröhlich has done with neural networks in Java. It sounds like an ideal starting point for a Java programmer like yourself.

寒冷纷飞旳雪 2024-08-23 12:10:49

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

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

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

BrainNet 将帮助您

  • 对神经元和神经网络有一个公正的了解
  • 获得有关智能系统的良好概念
  • 了解如何使用这个神经网络库,以便在您的应用程序中使用它
    项目。
  • 了解如何开发一些很酷的神经网络程序

If you are looking for concepts, I suggest BrainNet,

Neural Networks - Part I: A simple handwriting recognition system in .NET

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

BrainNet will help you to

  • Obtain a fair understanding regarding Neurons and neural networks
  • Gain a good concept regarding intelligent systems
  • Learn how to play with this neural network library to use it in your
    projects.
  • Understand how to develop some cool neural network programs
蓝戈者 2024-08-23 12:10:49

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

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

I suggest you to start from handwritten digits recognition for the following reasons:

  • The task is well-defined
  • There's a very good database of handwritten digits mentioned above (MNIST)
  • There're lots of implemented algorithms tested on this problem
  • One of the most successful approach for this problem is convolutional neural networks which even were used in commercial applications. There're few implementations available including C++, CUDA, Matlab, Python. Unfortunately I don't know any Java implementations.
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文