带有pytorch的逐行雅可比行列式

数据挖掘 Python 梯度下降 火炬
2022-02-16 19:46:49

假设我有我将的每一行,得到Y我想计算一个定义为f:RdiRdoXRn×difXY=f(X)Rn×doZ

Zi,j,k=Yi,jXi,k

使用火炬。我应该如何定义v来实现这一目标?

def get_row_wise_jacobian(X, f):
     n = X.shape[0]
     d_i = X.shape[1]

     x = X.clone().detach().requires_grad_(True)

     y = f(x)
     d_o = y.shape[1]

     v = ?
     y.backward(v)

     Z = x.grad
     return Z
1个回答

如果 f(x) 是一个深度网络,您可以使用此存储库的差分网络实现。该差分网络向前馈图添加了一些计算,以计算网络输入的分析雅可比行列式。与 autograd 实现相比,计算开销最小,并且 Jacobian 是使用前向微分计算的。此外,存储库的示例表明您希望使用 softplus 激活来获得更平滑的雅可比矩阵。