例えば、事前に訓練されたモデルの最後の層のみを訓練するために、ネットワーク内の単一の層を凍結することが可能であることを知っています。私が探しているのは、特定の学習率をさまざまなレイヤーに適用する方法です。
したがって、たとえば、最初のレイヤーで0.000001という非常に低い学習率で、その後、次の各レイヤーで徐々に学習率を上げていきます。そのため、最後のレイヤーの学習率は0.01程度になります。
これはpytorchで可能ですか?これをアーカイブする方法はありますか?
解決策は次のとおりです。
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)がかかります。トリックは、モデルを作成するときに、レイヤーに名前を付けるか、グループ化することです。