快捷方式

torch.func.jvp

torch.func.jvp(func, primals, tangents, *, strict=False, has_aux=False)[源代码]

代表 Jacobian-向量积,返回一个元组,其中包含 func(*primals) 的输出和 “在 primals 处评估的 func 的 Jacobian” 乘以 tangents。 这也称为前向模式自动微分。

参数
  • func (function) – 一个 Python 函数,它接受一个或多个参数,其中一个必须是 Tensor,并返回一个或多个 Tensor

  • primals (Tensors) – func 的位置参数,都必须是 Tensor。 返回的函数还将计算关于这些参数的导数

  • tangents (Tensors) – 计算 Jacobian-向量积的 “向量”。 必须与 func 的输入具有相同的结构和大小。

  • has_aux (bool) – 标志,指示 func 返回一个 (output, aux) 元组,其中第一个元素是要微分的函数的输出,第二个元素是不进行微分的其他辅助对象。 默认值:False。

返回

返回一个 (output, jvp_out) 元组,其中包含在 primals 处评估的 func 的输出和 Jacobian-向量积。 如果 has_aux True,则改为返回 (output, jvp_out, aux) 元组。

注意

您可能会看到此 API 报错 “operator X 未实现前向模式 AD”。 如果是这样,请提交错误报告,我们将优先处理它。

当您希望计算函数 R^1 -> R^N 的梯度时,jvp 非常有用

>>> from torch.func import jvp
>>> x = torch.randn([])
>>> f = lambda x: x * torch.tensor([1., 2., 3])
>>> value, grad = jvp(f, (x,), (torch.tensor(1.),))
>>> assert torch.allclose(value, f(x))
>>> assert torch.allclose(grad, torch.tensor([1., 2, 3]))

jvp() 可以通过为每个输入传递切线来支持具有多个输入的函数

>>> from torch.func import jvp
>>> x = torch.randn(5)
>>> y = torch.randn(5)
>>> f = lambda x, y: (x * y)
>>> _, output = jvp(f, (x, y), (torch.ones(5), torch.ones(5)))
>>> assert torch.allclose(output, x + y)

文档

访问 PyTorch 的全面开发者文档

查看文档

教程

获取面向初学者和高级开发者的深度教程

查看教程

资源

查找开发资源并获得解答

查看资源