Python 为什么要在Pytorch中为自定义层定义反向方法?

Python 为什么要在Pytorch中为自定义层定义反向方法?,python,optimization,pytorch,layer,Python,Optimization,Pytorch,Layer,我目前正在Pytorch中构建一个需要多个自定义层的模型。我只定义了正向方法,因此没有定义反向方法。模型似乎运行良好,优化器能够使用层中的渐变进行更新。然而,我看到许多人定义落后的方法,我想知道我是否遗漏了什么 为什么需要定义向后传递?在极少数情况下,您应该在PyTorch中实现自己的向后传递功能。这是因为PyTorch的autograd功能负责计算绝大多数操作的梯度 最明显的例外是 有一个函数不能表示为其他可微函数的有限组合。例如,如果需要不完整的gamma函数,则可能需要编写自己的使用num

我目前正在Pytorch中构建一个需要多个自定义层的模型。我只定义了正向方法,因此没有定义反向方法。模型似乎运行良好,优化器能够使用层中的渐变进行更新。然而,我看到许多人定义落后的方法,我想知道我是否遗漏了什么


为什么需要定义向后传递?

在极少数情况下,您应该在PyTorch中实现自己的向后传递功能。这是因为PyTorch的autograd功能负责计算绝大多数操作的梯度

最明显的例外是

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

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


在极少数情况下,您应该在PyTorch中实现自己的向后函数。这是因为PyTorch的autograd功能负责计算绝大多数操作的梯度

最明显的例外是

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

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