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?
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.
Suivre devrait aider pour la régularisation L2:
optimizer = torch.optim.Adam(model.parameters(), lr=1e-4, weight_decay=1e-5)
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:
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.