方法はありますか、PyTorchで簡単なL1/L2正規化を追加できますか?おそらくdata_loss
にreg_loss
を追加するだけで正規化された損失を計算できますが、PyTorchライブラリのサポートを手動で行うことなくより簡単に行うための明示的な方法はありますか?
これはPyTorchのドキュメントに記載されています。 http://pytorch.org/docs/optim.html#torch.optim.Adagrad をご覧ください。最適化関数に重み減衰パラメーターを使用してL2損失を追加できます。
以下は、L2の正則化に役立つはずです。
optimizer = torch.optim.Adam(model.parameters(), lr=1e-4, weight_decay=1e-5)
L2正則化の場合、
lambda = torch.tensor(1.)
l2_reg = torch.tensor(0.)
for param in model.parameters():
l2_reg += torch.norm(param)
loss += lambda * l2_reg
参照:
明らかに、torch.norm
を使用する@Sherif Ahmadは、直接的なアプローチよりも低速です。
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)
出力されます:
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)
12GigのRAMを搭載した単一のGPU駆動ユニット。