PyTorch:保存优化器状态的目的是什么?

PyTorch: What's the purpose of saving the optimizer state?

PyTorch 能够保存和加载优化器的状态。显示了一个示例 in the PyTorch tutorial。我目前只是保存和加载模型状态而不是优化器。那么除了不必记住学习率等优化器参数之外,保存和加载优化器状态还有什么意义。优化器状态中包含什么?

我相信保存优化器的状态是日志记录和可再现性的一个重要方面。它存储有关优化器设置的许多详细信息;包括使用的优化器类型、学习率、权重衰减、使用的 scheduler 类型(我个人觉得这非常有用)等。此外,它可以以类似的方式使用通过 .load_state_dict() 将预训练的权重加载到您当前的模型中,这样您就可以使用相同的方法将一些存储的优化器 setting/configuration 传递到您当前的优化器中:optimizer.load_state_dict(some_good_optimizer.state_dict()).

如果您想稍后恢复模型训练,您应该保存优化器状态。特别是如果 Adam 是您的优化器。 Adam 是一种自适应学习率方法,这意味着它会计算各种参数的个体学习率。

如果只想使用保存的模型进行推理,则不需要。

但是,最好同时保存模型状态和优化器状态。 如果您想稍后绘制它们,您还可以保存损失历史记录和其他 运行 指标。

我会这样做,

    torch.save({
            'epoch': epochs,
            'model_state_dict': model.state_dict(),
            'optimizer_state_dict': optimizer.state_dict(),
            'train_loss_history': loss_history,
            }, PATH)