【问题标题】:Multilayer perceptron for ocr works with only some data setsocr 的多层感知器仅适用于某些数据集
【发布时间】:2013-11-14 00:25:59
【问题描述】:

新发展

我最近使用 OpenCV 的 MLP 实现来测试它是否可以解决相同的任务。 OpenCV 能够对我的实现能够分类的相同数据集进行分类,但无法解决我无法解决的数据集。也许这是由于终止参数(确定何时结束训练)。我在 100,000 次迭代之前就停止了,MLP 没有泛化。这次的网络架构是 400 个输入神经元、10 个隐藏神经元和 2 个输出神经元。

我已经实现了多层感知器算法,并验证了它可以与 XOR 逻辑门一起使用。对于 OCR,我教网络正确分类用厚绘图工具(标记)绘制的“A”和“B”字母。但是,当我尝试教网络对薄的绘图工具(铅笔)进行分类时,网络似乎陷入了困境,无法在合理的时间内对字母进行分类。我用 GIMP 绘制的字母也是如此。

我知道人们说我们必须利用动力才能走出山谷,但我读到的消息来源含糊不清。我尝试在误差变化不显着时增加动量值并在高于时减小,但似乎没有帮助。

我的网络架构是 400 个输入神经元(每个像素一个),2 个隐藏层,每个隐藏层 25 个神经元,输出层有 2 个神经元。这些图像是灰度图像,黑色像素的输入为 -0.5,白色像素的输入为 0.5。

编辑:

目前网络正在训练,直到每个训练示例的计算误差低于可接受的误差常数。我也尝试过在 10,000 个 epoch 时停止训练,但这会产生不好的预测。使用的激活函数是 sigmoid 逻辑函数。我使用的误差函数是平方误差之和。

我想我可能已经达到了局部最小值而不是山谷,但这不应该重复发生。

【问题讨论】:

  • 您是否在分类(未见输入的预测)或训练时遇到问题?听起来好像是训练时间引起了问题,但还不清楚。此外,您应该说明您在图层上使用的激活函数和损失函数

标签: machine-learning neural-network ocr momentum


【解决方案1】:

动量并不总是好的,它可以帮助模型跳出坏谷,但也可能使模型跳出好谷。尤其是之前的权重更新方向不好的时候。

有几个原因会导致您的模型无法正常工作。 参数设置不好,设置 MLP 的参数总是一项不平凡的任务。

一个简单的方法是首先将学习率、动量权重和正则化权重设置为一个很大的数字,但将迭代(或 epoch)设置为一个非常大的权重。一旦模型发散,学习率、动量权重和正则化权重减半。

这种方法可以让模型慢慢收敛到局部最优,也给了它跳出坏谷的机会。

此外,在我看来,一个输出神经元足以解决两类问题。如果没有必要,则无需增加模型的复杂度。同样,如果可能,请使用三层 MLP 而不是四层 MLP。

【讨论】:

  • 很抱歉,有几件事我不明白。通过将迭代设置为较大的“权重”,您是否意味着我应该在大量时期后停止?我也在检查关于训练集的错误。当您说“分歧”时,您是说我应该检查与验证集相关的错误吗?还有一件事,我需要使用正则化吗?谢谢。
  • 抱歉延迟。我的意思是多次运行算法。发散意味着误差变得越来越大并且永远不会减少。可以在训练期间测量误差。例如,每 50 个 epoch 计算一次平均误差。最好使用正则化。
  • 我仍然有问题,但我不明白为什么它仍然无法正常工作。它似乎减少了错误,但错误仍然很大。
  • 有两个主要原因:(1)有足够的训练数据吗? (2)你提取的特征够不够? (3) 模型可能陷入局部最优。 (4)如果你有足够的训练数据,尽量增加模型的复杂度。 (5)不断调整参数。
  • 我想我知道为什么它现在不起作用了,尽管也许我应该早点弄清楚这一点。模型似乎没有足够的训练样本来正确分类新字母(不包括在训练集中)。也许它与其他数据集一起工作,因为它们更容易分类。感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 2023-03-03
  • 2019-04-11
  • 2021-07-25
  • 2023-02-05
  • 2018-09-20
  • 2015-08-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多