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

问题描述 投票:0回答:1

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

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

但是,当我使用相同的训练数据加载相同的模型时,损失值首先会波动到0.5附近。

然后,损耗值在~10次迭代中非常快地减小到0.01附近并且现在缓慢地减小。

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

python deep-learning pytorch loss
1个回答
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

© www.soinside.com 2019 - 2024. All rights reserved.