假设我有一个二元函数f(x,y)
和域R^d x R^d
,我有两组输入X = [x1,x2,...,xm]
和Y = [y1,y2,...,yn]
,其中每个xi
和yj
都是d
维向量,我想用第i,j
个元素[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)
然而,我无法推广到二维和更高导数的输出情况!任何帮助都将不胜感激
如PyTorch's autograd docs所示,您可以计算函数的
hessian
(二阶偏导数),其输入与您所做的类似:这是documentation for Hessian specifically
相关问题 更多 >
编程相关推荐