Подтвердить что ты не робот

Добавление регуляции L1/L2 в PyTorch?

Есть ли способ, я могу добавить простую регуляцию L1/L2 в PyTorch? Мы можем, вероятно, вычислить регуляризованную потерю, просто добавив data_loss с помощью reg_loss, но есть ли какой-либо явный способ, любая поддержка библиотеки PyTorch, чтобы сделать это легче, не делая это вручную?

4b9b3361

Ответ 1

Это представлено в документации для PyTorch. Посмотрите на http://pytorch.org/docs/optim.html#torch.optim.Adagrad. Вы можете добавить потерю L2 с помощью параметра снижения веса в функцию оптимизации.

Ответ 2

Следующее должно помочь для L2-регуляризации:

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

Ответ 4

Интересно, что torch.norm медленнее на CPU и быстрее на GPU, чем прямой подход.

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)

Out:

1000 loops, best of 3: 910 µs per loop
1000 loops, best of 3: 1.76 ms per loop

С другой стороны:

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

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

Out:

10000 loops, best of 3: 50 µs per loop
10000 loops, best of 3: 26 µs per loop