我现在正在使用PyTorch进行深度学习。
我之前训练过一个模型,并保存了参数。训练结束前的损失值约为$('.classname:not([style*="display: none"])').length
。
但是,当我使用相同的训练数据加载相同的模型时,损失值最初会波动至0.003~0.006
附近。
然后,损耗值在大约10次迭代中迅速下降到0.5
左右,现在下降缓慢。
有人知道为什么这种情况持续发生吗?由于我正在加载相同的模型/训练数据。我原本希望损失值的开始水平与上次训练的结束水平相似。
答案 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']
如果不保存优化器状态,则会丢失重要信息,例如当前的学习率,动量等。这可能是导致问题的原因。