PyTorch: вычисление векторного произведения Гессена с помощью nn.parameters () - PullRequest
0 голосов
/ 07 февраля 2019

Используя PyTorch, я хотел бы рассчитать векторное произведение Гессиана, где гессиан является матрицей второй производной функции потерь некоторой нейронной сети, а вектор будет вектором градиентов этой функции потерь.

Я знаю, как вычислить векторное произведение Гессе для обычной функции благодаря этому посту .Тем не менее, я сталкиваюсь с проблемами, когда функция является функцией потерь нейронной сети.Это связано с тем, что параметры упакованы в модуль, доступный через nn.parameters (), а не тензор факела.

Я хочу сделать что-то вроде этого (не работает):

### a simple neural network 
linear = nn.Linear(10, 20) 

x = torch.randn(1, 10) 

y = linear(x).sum()
### compute the gradient and make a copy that is detached from the graph 
grad = torch.autograd.grad(y, linear.parameters(),create_graph=True)

v = grad.clone().detach()
### compute the Hessian vector product 
z = grad @ v 
z.backward()

По аналогии это (работает):

x = Variable(torch.Tensor([1, 1]), requires_grad=True)

f = 3*x[0]**2 + 4*x[0]*x[1] + x[1]**2

grad, = torch.autograd.grad(f, x, create_graph=True)

v = grad.clone().detach()

z = grad @ v

z.backward()

В этом посте рассматривается аналогичная (возможно, та же проблема?) Проблема, но я не понимаю ее решения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...