【发布时间】:2021-04-02 03:28:16
【问题描述】:
我目前正在 Pytorch 中构建一个需要多个自定义层的模型。我只定义了前向方法,因此没有定义后向方法。该模型似乎运行良好,优化器能够使用来自层的梯度进行更新。但是,我看到很多人定义了落后的方法,我想知道我是否遗漏了什么。
为什么你需要定义一个反向传递?
【问题讨论】:
标签: python optimization pytorch layer
我目前正在 Pytorch 中构建一个需要多个自定义层的模型。我只定义了前向方法,因此没有定义后向方法。该模型似乎运行良好,优化器能够使用来自层的梯度进行更新。但是,我看到很多人定义了落后的方法,我想知道我是否遗漏了什么。
为什么你需要定义一个反向传递?
【问题讨论】:
标签: python optimization pytorch layer
在极少数情况下,您应该在 PyTorch 中实现自己的后向函数。这是因为 PyTorch 的 autograd 功能负责计算绝大多数操作的梯度。
最明显的例外是
您的函数不能表示为其他可微函数的有限组合(例如,如果您需要不完整的 gamma 函数,您可能需要编写自己的使用 numpy 和/或查找表的正向和反向) .
您希望加快一个特别复杂的表达式的计算速度,在应用链式法则后,该表达式的梯度可以大大简化。
【讨论】: