11

目前我正在学习神经网络,我正在尝试创建一个可以被训练来识别手写字符的应用程序。对于这个问题,我使用了前馈神经网络,当我训练它识别 1、2 或 3 个不同的字符时,它似乎可以工作。但是当我试图让网络学习超过 3 个字符时,它会停滞在 40 - 60% 左右的错误百分比上。

我尝试了多层和更少/更多的神经元,但我似乎无法做到这一点,现在我想知道前馈神经网络是否能够识别那么多信息。

一些统计数据:

网络类型:前馈神经网络

输入神经元: 100(一个10 * 10)的网格用于绘制字符

输出神经元:要重新识别的字符数量

有谁知道我的架构中可能存在的缺陷是什么?输入神经元是否过多?前馈神经网络不能进行字符识别吗?

4

4 回答 4

14

对于您需要的手写字符识别

  1. 许多训练示例(也许您应该创建训练集的扭曲)
  2. 输出层中的softmax激活函数
  3. 交叉熵误差函数
  4. 随机梯度下降训练
  5. 每一层都有一个偏差

一个很好的测试问题是手写数字数据集MNIST。以下是在该数据集上成功应用神经网络的论文:

Y. LeCun、L. Bottou、Y. Bengio 和 P. Haffner:应用于文档识别的基于梯度的学习,http: //yann.lecun.com/exdb/publis/pdf/lecun-98.pdf

Dan Claudiu Ciresan、Ueli Meier、Luca Maria Gambardella、Juergen Schmidhuber:Deep Big Simple Neural Nets Excel on Handwritten Digit Recognition,http ://arxiv.org/abs/1003.0358

我训练了一个具有 784-200-50-10 架构的 MLP,并在测试集上获得了 >96% 的准确率。

于 2012-03-13T21:04:29.130 回答
10

您可能想在http://www.ml-class.org上学习第 3 课和第 4 课。Ng教授已经解决了这个确切的问题。他正在对 10 个数字 (0...9) 进行分类。他在课堂上所做的一些使他的训练准确率达到 95% 的事情是:

  • 输入神经元:400 (20x20)
    • 隐藏层:2
    • 隐藏层大小:25
    • 激活函数:sigmoid
    • 训练方法:梯度下降
    • 数据大小:5000
于 2012-03-14T21:12:20.183 回答
3

检查这个示例程序 手写数字识别

程序使用 带有FANN 库的Semeion 手写数字数据集

于 2012-03-14T22:06:25.113 回答
1

前段时间我有一个类似的问题,试图使用 MNIST 数据集识别手写数字。我的前馈神经网络在验证集上给出了大约 92% 的准确率,但经常对我给它的图像进行错误分类。

我通过在我的网络中添加一个隐藏层并使用 RMSProp 解决了这个问题。网络现在给出了大约 97% 的准确率,并正确地分类了我给它的图像。

此外,如果您的成本没有降低,则可能意味着您的学习率太高,或者您的网络可能陷入局部最小值。在这种情况下,您可以尝试降低学习率和初始权重。

于 2017-04-05T09:49:34.980 回答