如何在PyTorch中使用autograd.grad签入?

如何在PyTorch中使用autograd.grad签入?,pytorch,autograd,Pytorch,Autograd,文档中不包括gradcheck的任何示例用例,它在哪里有用?文档中提供了一个示例用例: 您可能需要检查您实现的反向方法 实际计算函数的导数。这是可能的 与小有限元数值近似的比较 差异: 来自torch.autograd导入梯度检查 #gradcheck将一个张量元组作为输入,检查梯度 #用这些张量计算的结果与数值结果足够接近 #近似值,如果它们都验证了此条件,则返回True。 输入=(torch.randn(20,20,dtype=torch.double,需要_grad=True),torc

文档中不包括gradcheck的任何示例用例,它在哪里有用?

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

您可能需要检查您实现的反向方法 实际计算函数的导数。这是可能的 与小有限元数值近似的比较 差异:

来自torch.autograd导入梯度检查
#gradcheck将一个张量元组作为输入,检查梯度
#用这些张量计算的结果与数值结果足够接近
#近似值,如果它们都验证了此条件,则返回True。
输入=(torch.randn(20,20,dtype=torch.double,需要_grad=True),torch.randn(30,20,dtype=torch.double,需要_grad=True))
测试=梯度检查(线性,输入,eps=1e-6,atol=1e-4)
打印(测试)
如上所述,
gradcheck
函数的目的是验证自定义后向函数是否与梯度的数值近似值一致。主要用例是在实现自定义向后操作时在极少数情况下,您应该在PyTorch中实现自己的后退功能。这是因为PyTorch的autograd功能负责计算绝大多数操作的梯度

最明显的例外是

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

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


  • gradcheck函数中的第一个参数指的是什么?线性层?如何将它与我编写的自定义函数一起使用?可以找到
    gradcheck
    的文档。第一个参数是一个函数,它接受一个张量(大小和类型与
    input
    )并返回一个张量或张量元组。