В настоящее время я использую TORCH.Autograd.function.function.function.jacobian для вычисления для каждого образца, elementwise градиенты скалярного выхода модели W.R.T. его входные данные. Мне нужно сохранить create_graph = true , потому что я хочу, чтобы полученные якобийские записи сами по себе требовали градиентов (для дальнейших расчетов).
Вот минимальный пример того, что я делаю:
import torch
from torch.autograd.functional import jacobian
def method_jac_strict(inputs, forward_fn):
# inputs: (N, F)
# forward_fn: (N, F) -> (N, 1)
# output: (N, F).
# compute full Jacobian:
d = jacobian(forward_fn, inputs, create_graph=True, strict=True) # (N, 1, N, F)
d = d.squeeze() # (N, N, F)
# extract only the diagonal block (each output wrt its own input sample): (N, F)
d = torch.einsum('iif->if', d)
return d
a Extraitiation - зависимости от партийного образца
Моя модель может включать в себя слои, такие как Batchnorm, поэтому образцы в партии не являются действительно независимыми. Тем не менее, я забочусь только о «элементных» градиентах - т.е. Обработка каждого скалярного вывода, как если бы он зависел только от собственного входного образца и игнорирования терминов поперечного образца.
Вопрос
Есть ли более эффективный/идиоматический способ в питте Диагональный?>
Подробнее здесь: https://stackoverflow.com/questions/796 ... orch-while
Более эффективный способ вычисления элементных градиентов (якобиан) в Pytorch при сохранении create_graph ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Функция обратной кинематики Pytorch, дающая якобиан тензорного значения 0
Anonymous » » в форуме Python - 0 Ответы
- 11 Просмотры
-
Последнее сообщение Anonymous
-