【问题标题】:The strange loss fluctuation when loading previous trained model加载先前训练的模型时奇怪的损失波动
【发布时间】:2019-02-21 12:09:39
【问题描述】:

我现在正在使用 PyTorch 进行深度学习。

我之前训练了一个模型并保存了参数。训练结束前的损失值约为0.003~0.006

但是,当我使用相同的训练数据加载相同的模型时,损失值最初会波动到 0.5 左右。

然后损失值在大约 10 次迭代中迅速下降到 0.01 左右,现在缓慢下降。

有谁知道为什么会出现这种情况?因为我正在加载相同的模型/训练数据。我预计损失值会以与上次训练结束时相似的水平开始。

【问题讨论】:

  • 您在保存模型时究竟保存了什么?您是否也保存了优化器的state_dict

标签: python deep-learning pytorch loss


【解决方案1】:

恢复训练时,您不仅应该加载网络的权重,还应该加载优化器状态。为此,您可以使用torch.save

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

然后,为了恢复训练:

model = TheModelClass(*args, **kwargs)
model.train()
optimizer = TheOptimizerClass(*args, **kwargs)

checkpoint = torch.load(PATH)
model.load_state_dict(checkpoint['model_state_dict'])
optimizer.load_state_dict(checkpoint['optimizer_state_dict'])
epoch = checkpoint['epoch']
loss = checkpoint['loss']

如果您不保存优化器状态,​​您会丢失当前学习率、动量等重要信息。这可能是您的问题的原因。

参考: https://pytorch.org/tutorials/beginner/saving_loading_models.html#saving-loading-a-general-checkpoint-for-inference-and-or-resuming-training

【讨论】:

  • 谢谢。似乎我没有正确保存以前的超参数。现在问题已经解决了。
猜你喜欢
  • 1970-01-01
  • 2019-04-20
  • 1970-01-01
  • 2017-12-15
  • 2017-06-26
  • 2021-06-04
  • 2018-12-09
  • 1970-01-01
  • 2019-06-03
相关资源
最近更新 更多