たれぱんのびぼーろく

わたしの備忘録、生物学とプログラミングが多いかも

PyTorchのLearningRate Scheduler

PyTorchではoptimizerの学習率 (Learning Rate) を動的に変更するUtilityがある。
このUtilityはSchedulerと呼ばれ、Class名では○○LRと名付けられている.

Schedulerのタイプ

更新の仕方によって以下のように分類される。

  • LambdaLR:
  • StepLR: x epochごとにlrをγ倍するタイプ. (例: 30 epochごとに0.1倍) *MultiStepLR: StepLRで epoch間隔を任意に設定できるタイプ
  • ExponentialLR: 毎epochでγ倍するタイプ, 要はexponential decay
  • CosineAnnealingLR:
  • ReduceLROnPlateau:

動作

optimizerを保持するインスタンスとして生成し、scheduler.step()でepochの進展を通知する。設定したepochに応答してoptimizerの学習率が自動更新される。

実装

_LRSchedulerがベース.
step()すると内部epoch++を行ったうえでoptimizer.param_groupsのparam_group["lr"]をget_lr()で更新.

LambdaLR

base_lr * labmda(epoch)がlrになる模様.