加载先前训练的模型时的奇怪损失波动

时间:2019-02-21 12:09:40

标签: python deep-learning pytorch loss

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

我之前训练过一个模型,并保存了参数。训练结束前的损失值约为$('.classname:not([style*="display: none"])').length

但是,当我使用相同的训练数据加载相同的模型时,损失值最初会波动至0.003~0.006附近。

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

有人知道为什么这种情况持续发生吗?由于我正在加载相同的模型/训练数据。我原本希望损失值的开始水平与上次训练的结束水平相似。

1 个答案:

答案 0 :(得分:2)

在继续训练时,您不仅应该加载网络的权重,还应该加载优化器状态。为此,您可以使用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