【问题标题】:Periodical pattern in loss function in a convolutional neural network (tensorflow)卷积神经网络(张量流)中损失函数的周期性模式
【发布时间】:2018-11-14 23:07:41
【问题描述】:

我正在使用 Tensorflow 中实现的卷积神经网络 (cnn) 进行图像分割。我有两个类,我使用交叉熵作为损失函数和 Adam 优化器。 我正在用大约 150 张图像训练网络。

在训练期间,我看到了这种周期性模式,训练损失会下降,直到达到几个高值,然后迅速下降到之前的水平。

在验证损失中也可以观察到类似的模式,验证损失会在几个时期内周期性下降,然后又回到之前的水平。

通过降低学习率,这种模式不再可见,但损失会更高,并且 Interception over Union(IoU) 会低得多。

编辑:我发现我有两次带有两个不同标签的图像。我还注意到这种模式与 drop_out 有关,在训练图像被学习到 100% 之后,drop_out 会导致在某些迭代中训练误差增加很多,这会导致峰值。有人遇到过这样的辍学经历吗?

有人见过这样的模式吗?这可能是什么原因?

【问题讨论】:

  • 您是否正确打乱了您的训练数据?如果数据没有被打乱,可能会发生这样的事情:你的模型只会看到某个类的输入并习惯这些输入(变得更好,减少损失),并且在某个点训练到达数据中它切换到的点另一个类,这将大大降低性能(因为此时模型偏向于另一个类)。
  • 是的,我使用random.shuffle 对数据进行洗牌,我可以尝试更改随机种子,看看是否会改变一些东西。我每批有两张图像,当一个时期结束时,我已经用我所有的训练图像进行了训练。我认为问题可能出在一张特定的图像上,但网络可以看到每个时期的所有图像。
  • 我找到了答案,我的数据集中有一张重复的图像,标签略有不同,因此数据集不一致,无法完美地学习数据集。更改此设置后,仍有一些明显的周期性峰值,但仅在前 200 个时期。

标签: python tensorflow loss-function cross-entropy dropout


【解决方案1】:

数据集中有重复的图像,该图像被标记了两次,并且标记不是100%完全一样,因此模型无法收敛,因为图像数据集不一致。当它接近收敛时,它会改变以尝试适应另一张图像,并且这个过程会一直持续下去。

【讨论】:

    猜你喜欢
    • 2018-07-25
    • 1970-01-01
    • 2017-03-18
    • 1970-01-01
    • 2016-12-15
    • 2017-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多