web-dev-qa-db-ja.com

Pytorchでレイヤーごとの学習率を適用する方法は?

例えば、事前に訓練されたモデルの最後の層のみを訓練するために、ネットワーク内の単一の層を凍結することが可能であることを知っています。私が探しているのは、特定の学習率をさまざまなレイヤーに適用する方法です。

したがって、たとえば、最初のレイヤーで0.000001という非常に低い学習率で、その後、次の各レイヤーで徐々に学習率を上げていきます。そのため、最後のレイヤーの学習率は0.01程度になります。

これはpytorchで可能ですか?これをアーカイブする方法はありますか?

14
blue-phoenox

解決策は次のとおりです。

from torch.optim import Adam

model = Net()

optim = Adam(
    [
        {"params": model.fc.parameters(), "lr": 1e-3},
        {"params": model.agroupoflayer.parameters()},
        {"params": model.lastlayer.parameters(), "lr": 4e-2},
    ],
    lr=5e-4,
)

オプティマイザーで指定しなかった他のパラメーターは最適化されません。したがって、すべてのレイヤーまたはグループ(または最適化するレイヤー)を指定する必要があります。および学習率を指定しなかった場合グローバル学習率(5e-4)がかかります。トリックは、モデルを作成するときに、レイヤーに名前を付けるか、グループ化することです。

23
Salih Karagoz