web-dev-qa-db-fra.com

Ajouter une régularisation L1 / L2 dans PyTorch?

Y at-il un moyen, je peux ajouter une régularisation simple L1/L2 dans PyTorch? Nous pouvons probablement calculer la perte régularisée en ajoutant simplement le data_loss avec le reg_loss mais existe-t-il un moyen explicite, une assistance de la bibliothèque PyTorch pour le faire plus facilement sans le faire manuellement?

20
Wasi Ahmad

Ceci est présenté dans la documentation de PyTorch. Regardez http://pytorch.org/docs/optim.html#torch.optim.Adagrad . Vous pouvez ajouter une perte L2 à l'aide du paramètre de réduction de poids de la fonction d'optimisation.

16
Kashyap

Suivre devrait aider pour la régularisation L2:

optimizer = torch.optim.Adam(model.parameters(), lr=1e-4, weight_decay=1e-5)
17

Pour la régularisation L2,

lambda = torch.tensor(1.)
l2_reg = torch.tensor(0.)
for param in model.parameters():
    l2_reg += torch.norm(param)
loss += lambda * l2_reg

Les références:

10
Sherif Ahmad

Apparemment @ Sherif Ahmad utilisant le torch.norm est plus lent que l’approche directe.

import torch
x = torch.randn(1024,100)
y = torch.randn(1024,100)

%timeit torch.sqrt((x - y).pow(2).sum(1))
%timeit torch.norm(x - y, 2, 1)

Est-ce que la sortie:

124 µs ± 2.22 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)
284 µs ± 5.18 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

Sur l'unité alimentée par GPU unique avec 12 Go de RAM.

1
prosti