torch.func.jvp¶
- torch.func.jvp(func, primals, tangents, *, strict=False, has_aux=False)¶
代表雅可比向量积,返回一个包含func(*primals)输出和“在
primals处评估的func的雅可比矩阵”乘以tangents的元组。这也被称为前向模式自动微分。- Parameters
func (函数) – 一个Python函数,接受一个或多个参数,其中必须有一个是Tensor,并返回一个或多个Tensor
原始值 (张量) – 传递给
func的位置参数,这些参数必须都是张量。返回的函数也将计算这些参数的导数切线 (张量) – 用于计算雅可比向量积的“向量”。必须与输入到
func的结构和大小相同。has_aux (bool) – 标志,指示
func返回一个(output, aux)元组,其中第一个元素是 要微分的函数的输出,第二个元素是 不会被微分的其他辅助对象。 默认值:False。
- Returns
返回一个
(output, jvp_out)元组,包含在primals处评估的func的输出和雅可比向量积。 如果has_aux is True,则改为返回一个(output, jvp_out, aux)元组。
注意
您可能会看到此API错误显示“未为运算符X实现前向模式自动微分”。如果是这样,请提交错误报告,我们将优先处理。
jvp 在你希望计算一个函数 R^1 -> R^N 的梯度时非常有用
>>> 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)