【问题标题】:tensorflow CNN loss function goes up and down ( oscilating) in tensorboard,How to remove them?tensorflow CNN损失函数在tensorboard中上下(振荡),如何去除它们?
【发布时间】:2017-12-08 04:37:00
【问题描述】:

我正在使用 tensorflow 在 Audioset2017 数据集上训练 ResNet50 在训练和验证结果的过程中,我的损失函数在波动,总体趋势在下降,但我很害怕。

我已经运行了 100 个 epoch,批量大小 = 100。 并且有降低和提高学习率,但没有效果。

想知道我的训练是否正确,我可以使用这个网络吗?或者它会导致错误的结果。我可以用一些技巧来删除它们吗? 这些是我的训练和验证(评估)损失和其他指标图片(来自张量板)。

验证方式:

火车模式:

【问题讨论】:

  • 你在使用tf.train.exponential_decay吗?请参阅staircase 参数。
  • @Mateen Ulhaq 不,我在 conv2d 之后只使用 batchnorm 层

标签: python machine-learning tensorflow deep-learning tensorboard


【解决方案1】:

似乎在 12k 步之后,模型开始过度拟合。训练损失进一步减少,而验证损失(泛化误差)再次缓慢增加。在此之后,训练模型只会让情况变得更糟。

在下图中,您处于过度拟合区域。

(来自www.deeplearningbook.org

您可能希望通过增加正则化来降低模型过度拟合训练数据的能力。例如,L2 权重正则化或dropout

至于振荡。考虑到您的批量大小为 100,它们可能是自然的。

【讨论】:

  • @Kilian 感谢您的回复,我没有任何正则化。我只有 Batchnorm 层
  • @creative_sh 那么,正则化将帮助您解决验证错误!
【解决方案2】:

在一个好的模型中,你会希望你的损失函数图下降到验证集。下降趋势表明您的模型正在泛化以学习以前未见过的示例。机器学习的总体目标是能够使用采样数据点来学习一些模型参数,这些数据点可以捕获学习问题并可以预测样本外示例。

对于训练集,损失值的下降趋势表明模型正在从提供的训练示例中学习对目标输出的合理估计。您通常也希望看到这个向下的图表;否则,这将意味着您的模型对训练集的拟合不足,并且凭经验保证在验证集上表现不佳。

要简要了解解释监督学习模型,请阅读Supervised Machine Learning: A Conversational Guide For Executives And Practitioners

【讨论】:

  • @Ekaba 感谢您的回答,但作为结论,我可以相信这个系统进行分类吗?其次,我可以用一些技巧来消除这些波动吗?
  • @creative_sh 这是个大问题。我要说的是,当模型没有过度拟合学习到的例子时,系统就有信心。这仅仅意味着学习模型应该在验证集上具有良好的预测准确性。损失的波动是训练模型时非常正常的观察结果。这里重要的是趋势,在这种情况下,它是向下的,这是一件好事。
猜你喜欢
  • 2018-12-22
  • 1970-01-01
  • 2018-12-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-26
  • 2018-10-20
  • 1970-01-01
  • 2023-03-28
相关资源
最近更新 更多