训练OCR的前馈神经网络

时间:2012-03-13 12:48:21

标签: artificial-intelligence neural-network ocr backpropagation feed-forward

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

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

一些统计数据:

网络类型:前馈神经网络

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

输出神经元:要重新定位的字符数

有谁知道我的架构中可能存在的缺陷是什么?输入神经元太多了吗?前馈神经网络是不是能够进行角色定位吗?

4 个答案:

答案 0 :(得分:14)

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

  1. 许多训练样例(也许你应该创建训练集的扭曲)
  2. 输出层中的softmax激活功能
  3. 交叉熵误差函数
  4. 使用随机渐变下降进行训练
  5. 每层的偏见
  6. 一个好的测试问题是手写数字数据集MNIST。以下是在该数据集上成功应用神经网络的论文:

    ÿ。 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%的准确度。

答案 1 :(得分:10)

您可能希望在http://www.ml-class.org关注第3和第4讲。吴教授解决了这个确切的问题。他正在分类10位数(0 ... 9)。他在课堂上所做的一些让他达到95%训练准确度的事情是:

  • 输入Nueron:400(20x20)
    • 隐藏层:2
    • 隐藏层的大小:25
    • 激活功能:sigmoid
    • 训练方法:渐变下降
    • 数据大小:5000

答案 2 :(得分:3)

答案 3 :(得分:1)

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

我通过在网络中添加隐藏图层并使用RMSProp修复了此问题。网现在提供大约97%的准确度,并正确地分类我给它的图像。

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