PyTorch:二元函数的高阶导数

2024-04-29 10:15:34 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有一个二元函数f(x,y)和域R^d x R^d,我有两组输入X = [x1,x2,...,xm] Y = [y1,y2,...,yn],其中每个xiyj都是d维向量,我想用第i,j个元素[f(xi,yj)]_ij计算矩阵。我可以在PyTorch中通过广播和做类似f(X.unsqueeze(1),Y)的事情来做到这一点

我真正想计算的是以下矩阵: [d/dx d/dy f(xi,yj)]_ij,其中我假设每个xiyi都是标量值。在PyTorch我该怎么做

我知道,对于单输入函数和一阶导数,我可以这样做(使用PyTorch的autograd.grad):

def derivative(x,f):
    return grad(f(x).sum(), x, create_graph=True)[0]

或:

def derivative(x, f):
    return grad(f(x), x, grad_outputs=torch.ones(x.shape),create_graph=True)

然而,我无法推广到二维和更高导数的输出情况!任何帮助都将不胜感激


Tags: 函数truereturndefcreate矩阵pytorchgraph
1条回答
网友
1楼 · 发布于 2024-04-29 10:15:34

PyTorch's autograd docs所示,您可以计算函数的hessian(二阶偏导数),其输入与您所做的类似:

import torch


def pow_reducer(x):
    return x.pow(3).sum()


inputs = torch.rand(2, 2)
hessian = torch.autograd.functional.hessian(pow_reducer, inputs)

这是documentation for Hessian specifically

相关问题 更多 >