web-dev-qa-db-fra.com

Pytorch Modifier le taux d'apprentissage en fonction du nombre d'époques

Lorsque je règle le taux d'apprentissage et que je trouve que la précision ne peut pas augmenter après l'entraînement de quelques époques

optimizer = optim.Adam(model.parameters(), lr = 1e-4)

n_epochs = 10
for i in range(n_epochs):

    // some training here

Si je veux utiliser un step decay: réduire le taux d'apprentissage d'un facteur 10 toutes les 5 époques, comment puis-je le faire?

Merci

3
Shin Yu Wu

Vous pouvez utiliser lr shedular torch.optim.lr_scheduler.StepLR

import torch.optim.lr_scheduler.StepLR
scheduler = StepLR(optimizer, step_size=5, gamma=0.1)

Décroît le taux d'apprentissage de chaque groupe de paramètres de gamma tous les step_size epochs voir la documentation ici Exemple de la documentation

# Assuming optimizer uses lr = 0.05 for all groups
# lr = 0.05     if Epoch < 30
# lr = 0.005    if 30 <= Epoch < 60
# lr = 0.0005   if 60 <= Epoch < 90
# ...
scheduler = StepLR(optimizer, step_size=30, gamma=0.1)
for Epoch in range(100):
    train(...)
    validate(...)
    scheduler.step()

Exemple:

import torch
import torch.optim as optim

optimizer = optim.SGD([torch.Rand((2,2), requires_grad=True)], lr=0.1)
scheduler = optim.lr_scheduler.StepLR(optimizer, step_size=5, gamma=0.1)
for Epoch in range(1, 21):
    scheduler.step()
    print('Epoch-{0} lr: {1}'.format(Epoch, optimizer.param_groups[0]['lr']))
    if Epoch % 5 == 0:print()
Epoch-1 lr: 0.1
Epoch-2 lr: 0.1
Epoch-3 lr: 0.1
Epoch-4 lr: 0.1
Epoch-5 lr: 0.1

Epoch-6 lr: 0.010000000000000002
Epoch-7 lr: 0.010000000000000002
Epoch-8 lr: 0.010000000000000002
Epoch-9 lr: 0.010000000000000002
Epoch-10 lr: 0.010000000000000002

Epoch-11 lr: 0.0010000000000000002
Epoch-12 lr: 0.0010000000000000002
Epoch-13 lr: 0.0010000000000000002
Epoch-14 lr: 0.0010000000000000002
Epoch-15 lr: 0.0010000000000000002

Epoch-16 lr: 0.00010000000000000003
Epoch-17 lr: 0.00010000000000000003
Epoch-18 lr: 0.00010000000000000003
Epoch-19 lr: 0.00010000000000000003
Epoch-20 lr: 0.00010000000000000003

Plus How to adjust Learning Rate - torch.optim.lr_scheduler fournit plusieurs méthodes pour ajuster le taux d'apprentissage en fonction du nombre d'époques.

8
Dishin H Goyani