【问题标题】:The loss plot and the criteria for determining whether it converges损失图和判断是否收敛的标准
【发布时间】:2016-12-31 16:22:18
【问题描述】:

我一直在运行一个以 tensorflow 作为后端的 keras u-net 实现。在实验中,我运行了 60 个 epoch。损失图如下所示,我可以假设程序已经收敛吗?在我看来,损失没有显着变化。

这是与定义优化器和启动训练过程相关的代码。

  optimizer = SGD(lr=0.001, momentum=0.9, decay=0.0005, nesterov=False)
  autoencoder.compile(loss=customized_loss, optimizer=optimizer, metrics=   [customized_dice])
   nb_epoch = 60
   batch_size = 32
   model.fit(imgs_train, imgs_mask_train, batch_size=batch_size, nb_epoch=nb_epoch, verbose=1,callbacks=[model_checkpoint])

【问题讨论】:

  • 这是训练损失还是验证损失?如果验证,这似乎甚至没有接近收敛,你需要运行更长的时间。也可以尝试更高的学习率
  • 嗨,我认为是训练损失。我包含了与定义优化器和启动培训相关的代码。如果您有任何cmets,请告诉我。谢谢。
  • 我们需要知道这是哪个损失来帮助您。在我看来,这是您模型中的成本损失。这有助于您确定置信度,而不是收敛或准确性。您可能过度拟合,在此限制下您需要绘制训练和验证损失而不是成本。
  • 嗨 Feras,我使用的是github.com/jocicmarko/ultrasound-nerve-segmentation 讨论的 dice_coefficient。我使用 segnet 而不是 u-net。此外,如何获得训练损失。训练输出看起来像这样 Epoch 2/60 4375/4375 [==============================] - 821s - loss: 0.7062- acc: 0.9731 这个损失是训练损失还是成本损失?
  • 嗨 Feras,您能否详细说明一下训练损失。在 Keras 文档中,我只看到打印成本(损失)、准确性和 val_loss 的选项。我没有看到专门命名为训练损失的项目。谢谢。

标签: tensorflow deep-learning keras


【解决方案1】:

它正在收敛 - 最初的收敛很快,然后变慢 - 这是正常的,它可以放慢很多,但仍然有意义地改善。根据网络中参数的数量和训练数据的数量,60 个 epoch 可能会也可能不会很长时间。在决定收敛之前,您希望在大量时期内基本上没有下降趋势。

一个非常好的经验法则可能是“自从看到最低损失以来的时期数 > 时期总数 / 4”。

另一个问题是它是否过度训练。您需要为此查看验证损失。保留 1/10 或 1/5 的训练数据并将其用于验证,当验证损失开始持续增加时,您就过度训练了。

【讨论】:

  • 超参数是否有任何建议值,例如多少个 epoch?
  • “自从看到最低损失以来的时期 > 时期总数 / 4”似乎有点激烈。如果您假设损失在收敛后充当随机游走,则它不应超过 sqrt(epochs),因为您上次看到最小值...
猜你喜欢
  • 2018-09-16
  • 2019-06-03
  • 1970-01-01
  • 2011-06-18
  • 1970-01-01
  • 2017-02-08
  • 1970-01-01
  • 2018-10-06
  • 1970-01-01
相关资源
最近更新 更多