💻
学習を途中で止めて再開する方法
途中で学習設定を変更することは可能
critic_iters
など)
✅ 方法1: 学習途中でパラメータを変更する(例:🔁 対話的に制御(例: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