如何在 PyTorch 中使用 autograd.gradcheck?

vai*_*ijr 10 pytorch autograd

该文档不包含任何 gradcheck 示例用例,它在哪里有用?

jod*_*dag 10

此处的文档中提供了一个示例用例:

https://pytorch.org/docs/master/notes/extending.html

您可能想检查您实现的向后方法是否实际计算了您的函数的导数。通过与使用小的有限差分的数值近似值进行比较是可能的:

from torch.autograd import gradcheck

# gradcheck takes a tuple of tensors as input, check if your gradient
# evaluated with these tensors are close enough to numerical
# approximations and returns True if they all verify this condition.
input = (torch.randn(20,20,dtype=torch.double,requires_grad=True), torch.randn(30,20,dtype=torch.double,requires_grad=True))
test = gradcheck(linear, input, eps=1e-6, atol=1e-4)
print(test)
Run Code Online (Sandbox Code Playgroud)

正如上面的引用所暗示的那样,该gradcheck函数的目的是验证自定义向后函数是否与梯度的数值近似一致。主要用例是当您实现自定义向后操作时。在极少数情况下,您应该在 PyTorch 中实现自己的向后功能。这是因为 PyTorch 的 autograd 功能负责计算绝大多数操作的梯度。

最明显的例外是

  1. 您有一个不能表示为其他可微函数的有限组合的函数(例如,如果您需要不完整的 gamma 函数,您可能想要编写自己的使用 numpy 和/或查找表的前向和后向函数)。

  2. 您希望加快一个特别复杂的表达式的计算速度,在应用链式法则后,该表达式的梯度可以大大简化。

  • gradcheck 函数中的第一个参数指的是什么?线性层?如何将它与我编写的自定义函数一起使用? (2认同)
  • “gradcheck”的文档可以在[此处](https://pytorch.org/docs/master/autograd.html#torch.autograd.gradcheck)找到。第一个参数是一个函数,它接受一个张量(与“输入”具有相同的大小和类型)并返回一个张量或张量元组。 (2认同)