【发布时间】:2021-04-27 21:54:20
【问题描述】:
假设我有一个二元函数f(x,y) 和域R^d x R^d,我有两组输入X = [x1,x2,...,xm] 和Y = [y1,y2,...,yn],其中每个xi 和yj 是d 维向量和我想用i,jth 元素[f(xi,yj)]_ij 计算矩阵。我可以在 PyTorch 中通过广播和执行f(X.unsqueeze(1),Y) 之类的操作来做到这一点。
我真正想要计算的是以下矩阵:
[d/dx d/dy f(xi,yj)]_ij,我假设每个 xi 和 yi 都是标量值。我将如何在 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)
但是,我无法推广到二维和更高导数的输出情况!任何帮助将不胜感激。
【问题讨论】:
-
你能提供一个示例函数及其输入吗?顺便说一句,你需要一个雅可比矩阵。
-
@kmario23 jacobian 是一阶的,OP 想了解高阶导数(例如,如下所示的 hessian),至少我是从:
However, I am unable to generalise to the two-dimensional and higher derivative output case得到的,如果不是你是对的。
标签: python pytorch gradient mathematical-optimization autograd