💻

学習を途中で止めて再開する方法

に公開

途中で学習設定を変更することは可能

✅ 方法1: 学習途中でパラメータを変更する(例:critic_itersなど)

🔁 対話的に制御(例:JupyterやColabの場合)

Pythonのループ構造を活かして、エポック数によって動的に設定を変えることができます。

for epoch in range(n_epoch):
    if epoch < 500:
        critic_iters = 5
    else:
        critic_iters = 2  # 後半はDの更新回数を減らす

同様に、学習率を途中で変更することもできます:

if epoch == 500:
    for param_group in optimizerD.param_groups:
        param_group['lr'] = 0.0001  # 学習率を下げる

✅ 方法2: 一時停止 → 再開(学習の中断と続行)

🔐 モデルとオプティマイザの状態保存

torch.save({
    'epoch': epoch,
    'gen_state_dict': gen_model.state_dict(),
    'disc_state_dict': disc_model.state_dict(),
    'optimizerG_state_dict': optimizerG.state_dict(),
    'optimizerD_state_dict': optimizerD.state_dict(),
    'loss_G': Loss_G_list,
    'loss_D': Loss_D_list,
}, f'{outf}/checkpoint_epoch{epoch+1}.pth')

🔓 復元するコード

checkpoint = torch.load('path_to_checkpoint.pth', map_location=device)
epoch_start = checkpoint['epoch'] + 1
gen_model.load_state_dict(checkpoint['gen_state_dict'])
disc_model.load_state_dict(checkpoint['disc_state_dict'])
optimizerG.load_state_dict(checkpoint['optimizerG_state_dict'])
optimizerD.load_state_dict(checkpoint['optimizerD_state_dict'])
Loss_G_list = checkpoint['loss_G']
Loss_D_list = checkpoint['loss_D']

そして、for epoch in range(epoch_start, n_epoch): から再開できます。


✅ 方法3: コマンドライン or スクリプトとして使う場合の切り替え

  • .yaml.json に設定を保存し、スクリプト内で読み込むことで、外部から学習条件を切り替える運用も可能です。

🎯 まとめ

操作 方法
critic_iters などのハイパーパラメータを途中変更 epochに応じた条件分岐で制御可能
学習を一時停止して再開 torch.save()torch.load() を使ってモデルとoptimizerの状態を保存・復元
学習率などを変更 optimizer.param_groups[0]['lr'] = 新しい値

Discussion