Вычисление выходного пиксельного градиента в PyTorch - PullRequest
0 голосов
/ 24 сентября 2019

Я ищу эффективный способ вычисления \ hat {x} измерений (bxcxhxw), определенных для выборки как:

eq

, где x - это выход того жеизмерения, сгенерированные моделью с параметрами \ theta и

i, j: индексировать высоту и ширину карты выходных объектов 2D

k: индексирует размер канала

l: индексирует параметры.

Как мне это сделать с помощью x.backward ()?Есть ли эффективный способ сделать это?

Если бы я сделал x.backward (torch.ones_like (x)), я бы вычислил сумму градиентов в приведенном выше уравнении вместо суммы их абсолютныхзначения.

Это можно сделать путем перебора всех пикселей в выходной карте и вычислить .backward ().Но это было бы невероятно дорого.Есть ли эффективный способ избежать цикла?

1 Ответ

0 голосов
/ 25 сентября 2019

После того, как вы позвоните .backward() в случае вашей потери, PyTorch рассчитает все градиенты для вас, каждый из которых имеет функцию .norm().Возможно, это то, что вы ищете?

Например:

x = torch.rand((4,3,3), requires_grad=True)   # Some output volume
y = torch.rand((4,3,3), requires_grad=True)   # Some output volume
z = x + y
loss = z.sum()
loss.backward() 

print(x.grad)          # Print gradients for x
print(x.grad.norm(1))  # Print the L1 norm for these gradients
...