损失图和判断是否收敛的标准

The loss plot and the criteria for determining whether it converges

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

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

  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])

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

一个很好的经验法则可能类似于 "number of epochs since lowest loss was seen > total number of epochs / 4"。

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