该文档不包含 gradcheck 的任何示例用例,它在哪里有用?
问问题
4880 次
1 回答
12
这里的文档中提供了一个示例用例:
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)
正如上面的引用所暗示的,该gradcheck
函数的目的是验证自定义后向函数是否与梯度的数值近似一致。主要用例是当您实现自定义后向操作时。在极少数情况下,您应该在 PyTorch 中实现自己的后向功能。这是因为 PyTorch 的 autograd 功能负责计算绝大多数操作的梯度。
最明显的例外是
您有一个函数不能表示为其他可微函数的有限组合(例如,如果您需要不完整的 gamma 函数,您可能需要编写自己的使用 numpy 和/或查找表的前向和后向)。
您希望加快一个特别复杂的表达式的计算速度,在应用链式法则后,梯度可以大大简化。
于 2019-08-23T18:39:05.740 回答