深層学習: オプティマイザー

0. 各種オプティマイザの紹介

このブログを参照してください:さまざまなオプティマイザー SGD、AdaGrad、Adam、および LBFGS は何をしますか?

1. オプティマイザーの選択 (最初に次の 3 つを選択)

1.0. コードは pytorch を使用しています

1.1。SGD+モメンタム

optimer = optim.SGD(model.parameters(), lr=0.1, weight_decay=0.2, momentum=0.9, nesterov=True)
  • weight_decay: L2 正則化ペナルティ係数
  • 運動量: 慣性運動量
  • Nesterov: Nesterov Accelerated Gradient はオプティマイザです。慣性が速すぎるのを防ぐために、勾配を測定して修正を行います。
  • 上記のハイパーパラメータを調整する必要があります

1.2. アダム

optimer= optim.Adam(model.parameters(), lr=0.1, weight_decay=0)
  • さまざまなパラメーターの適応学習率を生成する
  • L2正則化なし

1.3. AdamW (Adam+L2 正則化)

optimer = optim.AdamW(model.parameters(), lr=0.1, weight_decay=0.2)

2.学習率の更新

学習率の更新を手動で設定します。あまり使用されず、SGD と組み合わせて使用​​できます。

step1.動的学習率を設定する

optimer = optim.SGD(model.parameters(), lr=0.1, weight_decay=0.2, momentum=0.9, nesterov=True)
scheduler = optim.lr_scheduler.LinearLR(optimer , start_factor=1.0, end_factor=0.6, total_iters=5)

start_factor: 開始重み係数
end_factor: 終了重み係数
total_iters: 反復係数

step2. モデルパラメータを更新しながら学習率を更新

optimer.step()
scheduler.step()

step3. 学習率

  1. 0.1*1.0=0.1
  2. 0.1*0.9=0.09
  3. 0.1*0.8=0.08
  4. 0.1*0.7=0.07
  5. 0.1*0.6=0.06
  6. 0.06
  7. 0.06
  8. もう変わらない
    ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/qq_42911863/article/details/126237999