Странное колебание потерь при загрузке предыдущей обученной модели - PullRequest
0 голосов
/ 21 февраля 2019

Я сейчас использую PyTorch для глубокого изучения.

Я уже тренировал модель и сохранял параметры.Значения потерь до окончания обучения составляли примерно 0.003~0.006.

Однако, когда я загружаю ту же модель с теми же данными обучения, значения потерь вначале колеблются примерно до 0.5.

Значения потерь затем очень быстро уменьшаются примерно до 0.01 за ~ 10 итераций и теперь медленно уменьшаются.

Кто-нибудь знает, почему такая ситуация сохраняется?Так как я загружаю ту же модель / данные тренировки.Я ожидал, что значения потерь начнутся на том же уровне, что и конец последней тренировки.

1 Ответ

0 голосов
/ 21 февраля 2019

При возобновлении обучения вы должны загружать не только вес сети, но и состояние оптимизатора.Для этого вы можете использовать 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

...