Как применить послойную скорость обучения в Pytorch?

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

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

Возможно ли такое в пыторче? Есть идеи, как я могу заархивировать это?


person MBT    schedule 11.08.2018    source источник


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

person Salih Karagoz    schedule 11.08.2018
comment
Отлично, именно то, что я искал - Спасибо! - person MBT; 11.08.2018