【问题标题】:Neural Network Training神经网络训练
【发布时间】:2011-04-07 13:49:25
【问题描述】:

我尝试识别每个数字的图片。我已经删除了除数字之外的所有其他内容,因此除了数字在图片上的位置不同之外几乎没有噪音。我使用 Neuroph 的图像识别 gui,并且有一些关于培训的问题。

似乎我为图片使用的分辨率越大,训练效果就越差。为什么是这样?我的训练集中有 100 张图片。每个数字 10 个。这可能太少了吗?为什么无论我做什么每次训练都会收敛到某个数字,通常在 2-3 之间的总网络错误。

希望您能提供帮助。

编辑:

这是其中一次培训的照片

学不了什么

【问题讨论】:

  • 你使用什么类型的学习算法?它的参数是什么?什么是神经网络拓扑?那是反向传播吗?请提供更多详细信息,因为它们对于此类问题至关重要。
  • 您在上面看到的图像使用了一种称为 sigmoid 传递函数的东西,它是一种反向传播。学习参数是默认值。学习率 0.5 和动量 0。神经网络使用了 12 个神经元的隐藏层,我发现它给出的误差最小。
  • 我最终成功地训练了这个网络,方法是将学习率更改为 0.35,并在网络开始收敛时随机化。

标签: java neural-network image-recognition


【解决方案1】:

信息量呈指数增长!

当您提供更高分辨率的图像时,您最终会提供必须评估的额外信息。

如果您的分辨率为 10x10 像素,则每张图像将产生 100 像素,而您每个数字有 10 张图像,即 每位数 1000 像素

现在,如果您将分辨率翻倍至 20x20 像素,则每张图像将产生 400 像素或每个数字 4000 像素

换句话说:增加分辨率会导致您必须评估每个数字的像素数指数增加。

添加更多(不必要的)像素会增加出错的可能性:

通常,在机器学习中,图片会被精简到最低限度(无论是尺寸还是颜色),以尽可能减少出错的空间。当您有更多像素时,算法可能会了解与图像中的实际形式完全无关的那些像素。

【讨论】:

    【解决方案2】:

    首先,我必须支持 Lirik 的评论,即提高分辨率在这里没有帮助。

    除此之外,每个数字的 10 个样本很可能没有足够的数据供您的神经网络进行训练。如果您正在训练一个 人类 以识别他们不理解的某种奇怪语言的数字,那么 10 个数字样本甚至可能还不够。通过将训练数据的大小增加到每个数字的 250-300 左右,看看是否能获得更好的结果。在不了解您的特定网络的情况下,很难说您究竟需要多少。

    我的猜测是,使用更多的训练数据和更低分辨率的图像,您会看到更好的结果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-20
      • 2019-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-30
      • 2015-06-04
      相关资源
      最近更新 更多