java 从哪里开始使用神经网络进行手写识别?
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/1968501/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Where to start Handwritten Recognition using Neural Network?
提问by Zeck
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.
我一直在尝试学习神经网络一段时间,我可以在网上了解一些基本教程。现在我想使用神经网络开发在线手写识别。所以我不知道从哪里开始?我需要一个很好的指导。最后我是java程序员。
What do you suggest I do?
你建议我做什么?
回答by Gregory Pakosz
Start simple with character recognition on the Unipendatabase.
从Unipen数据库上的字符识别开始。
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:
您需要从原始轨迹数据中提取相关特征,以形成通常所说的“特征向量”。例如,您可以使用插值方案对数据重新采样以得到 n 个元组,每个元组包含如下信息:
- 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.
一旦有了固定大小的特征向量,就可以将其用作神经网络的输入。首先尝试 MLP 网络。
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).
如果您需要开始从 Ink 数据中提取特征,请查看HP 的 Lipi Toolkit(请注意,尽管他们的识别器不使用神经网络)。
You can also have a look at this 15 Steps to Implement a Neural Network tutorial.
您还可以查看实现神经网络的 15 个步骤教程。
回答by David
Introduction To Neural Networks for Javais a good introductory book and includes a handwriting recognition example.
Java 神经网络简介是一本很好的介绍性书籍,其中包括一个手写识别示例。
回答by Chad Okere
Peter Norvig's Artificial Intelligence: A Modern Approachis a good book on general AI and explains a lot about the basics, and there is a section on Back Propagation neural networks.
Peter Norvig 的《人工智能:现代方法》是一本关于通用 AI 的好书,解释了很多基础知识,其中有一节介绍了反向传播神经网络。
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 Setat the UCI Machine Learning Repository
有手写数字的MNIST DATABASE,或手写字符数据集的基于笔的识别在UCI机器学习库
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.
UCI ML 存储库有很多很棒的数据集,其中很多都可以很好地训练神经网络。即使你不知道它们是关于什么的,你也可以拿一些来看看你的 ML 系统是否可以完成分类任务。查看具有大量属性和实例的分类任务,尽管您在开始时也可以尝试较小的任务。
By the way, there are a lot more techniques besides neural networks, including Support Vector Machines, which are popular.
顺便说一下,除了神经网络,还有很多技术,包括流行的支持向量机。
回答by Aaron Digulla
Have a look at some of the project floating around the net:
看看网上流传的一些项目:
- Neural Network Handwriting Recognition Applet
- Handwriting Recognition in Java Technology
- Handwriting recognition
To list just the three first links Google spits out for "java handwriting recognition"
仅列出 Google 为“ java 手写识别”吐出的前三个链接
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!
祝你好运!
回答by Eamon Nerbonne
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 readingthe 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.
对你来说,这意味着暂时推迟阅读神经网络文献(先拿一些现成的黑盒实现)并阅读实际系统使用的图像处理类型等。如果您的数据可以包含压力和速度信息,那就更好了。像 LDA 热图这样的东西可以说明最初看到哪些特征重要,哪些不重要。
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.
对于基本分类,有大量不错的算法。大多数工作都很好,对你来说也很好。困难的部分不在于选择或调整算法,而在于避免垃圾进垃圾出的场景。
回答by Don Chakkappan
Heaton research will help you a lot
Heaton 的研究会对你有很大帮助
http://www.heatonresearch.com/articles/7/page3.html- visit this for tutorial with sample code snippets
http://www.heatonresearch.com/articles/7/page3.html- 访问此教程以获取示例代码片段
回答by amazedsaint
If you are looking for concepts, I suggest BrainNet,
如果你正在寻找概念,我建议BrainNet,
Neural Networks - Part I: A simple handwriting recognition system in .NET
神经网络 - 第一部分:.NET 中的简单手写识别系统
http://amazedsaint.blogspot.com/2008/01/neural-networks-part-i-simple.html
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
BrainNet 将帮助您
- 获得对神经元和神经网络的公平理解
- 获得有关智能系统的良好概念
- 了解如何在您的项目中使用这个神经网络库。
- 了解如何开发一些很酷的神经网络程序
回答by Mikhail Sirotenko
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.
- 任务明确
- 上面提到的手写数字有一个非常好的数据库(MNIST)
- 在这个问题上测试了很多已实现的算法
- 解决这个问题最成功的方法之一是卷积神经网络,它甚至被用于商业应用。可用的实现很少,包括 C++、CUDA、Matlab、Python。不幸的是,我不知道任何 Java 实现。
回答by Salvin Francis
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.
程序“学习”的模式越多,它提供的答案就越准确。
回答by Zaid
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.
看看 Jochen Fr?hlich 用Java 中的神经网络做了什么。对于像您这样的 Java 程序员来说,这听起来像是一个理想的起点。


