Как применять уровень обучения в Питорче?

Я знаю, что можно заморозить отдельные слои в сети, например, для обучения только последних слоев предварительно обученной модели. То, что я ищу, - это способ применить определенные уровни обучения к различным слоям.

Так, например, очень низкий уровень обучения 0,000001 для первого слоя, а затем постепенно увеличивается скорость обучения для каждого из следующих слоев. Так что последний слой затем заканчивается скоростью обучения 0,01 или около того.

Возможно ли это в pytorch? Любая идея, как я могу архивировать это?

Ответ 1

Вот решение:

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). Хитрость в том, что когда вы создаете модель, вы должны дать имена слоям или вы можете сгруппировать ее.