我现在正在使用PyTorch进行深度学习。
我之前训练了一个模型并保存了参数。训练结束前的损失值约为0.003~0.006
。
但是,当我使用相同的训练数据加载相同的模型时,损失值首先会波动到0.5
附近。
然后,损耗值在~10次迭代中非常快地减小到0.01
附近并且现在缓慢地减小。
有谁知道为什么会出现这种情况?因为我正在加载相同的模型/训练数据。我期待损失值将从与上次训练结束时类似的水平开始。
恢复训练时,您不仅应该加载网络的权重,还应该加载优化器状态。为此,您可以使用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']
如果不保存优化器状态,则会丢失重要信息,例如当前学习速率,动量等。这可能是导致问题的原因。