Optimizerおよびoptimizer.step()の使用法内のpytorch



Pytorch Inside Optimizer



公式ドキュメントを参照してください リンク

  • 学習率のすべてのレベルを指定する場合:
optim.SGD([ {'params': model.base.parameters()}, {'params': model.classifier.parameters(), 'lr': 1e-3} ], lr=1e-2, momentum=0.9)

これは、model.baseパラメーターが学習率1e-2を使用し、パラメーターmodel.classifierが1e-3の学習率を使用し、0.9の運動量がすべてのパラメーターに使用されることを意味します。



  • 単一の最適化を行う

すべてのオプティマイザーは、すべてのパラメーターを更新するstep()メソッドを実現しています。 2つの方法で使用できます。

optimizer.step()

これは、簡略化されたバージョンをサポートする最もオプティマイザです。このような計算が適切に行われた後、勾配が後方()関数のようになったら、この関数を呼び出すことができます。



for input, target in dataset: optimizer.zero_grad() output = model(input) loss = loss_fn(output, target) loss.backward() optimizer.step() optimizer.step(closure)

共役勾配法やLBFGSなどの一部の最適化アルゴリズムは、計算関数を数回繰り返す必要があるため、モデルを再計算できるようにクロージャを渡す必要があります。クロージャーは、勾配を空にし、損失を計算してから戻る必要があります。

  • 例:

for input, target in dataset: def closure(): optimizer.zero_grad() output = model(input) loss = loss_fn(output, target) loss.backward() return loss optimizer.step(closure)