【问题标题】:Get exact formula used by Pytorch autograd to compute gradients获取 Pytorch autograd 用于计算梯度的精确公式
【发布时间】:2020-12-29 20:26:16
【问题描述】:

我正在实现一个自定义 CNN,其中包含一些自定义模块。我只为自定义模块实现了前向传递,并将它们的后向传递留给了 autograd。 我已经通过自定义模块的参数手动计算了正确的反向传播公式,我希望看看它们是否与 autograd 内部用于计算梯度的公式匹配。 有没有办法看到这个? 谢谢

编辑(添加测试用例):-

我有一个复杂的仿射层,其中权重和输入是复值矩阵,操作是权重和输入矩阵的矩阵乘法。 两个复数的乘积由下式给出 - (a+ib)(c+id) = (ac-bd)+i(ad+bc)

鉴于我们有来自较高层的传入梯度,我计算了该层的反向传播公式。 结果是 dL/dI(n) = (hermitian(W(n))).matmul(dL/dI(n+1)) 其中I(n)和W(n)是第n层的输入和权重,I(n+1)是第(n+1)层的输入。

所以我想检查 autograd 是否也使用我推导出的相同公式计算 dL/dI(n)。

(由于 Pytorch 目前不支持复值张量反向传播,因此我通过处理单独的实部和虚部张量创建了自己的复数表示)

【问题讨论】:

  • 使用测试用例适合你吗?
  • 对我的回答有任何反馈吗?请查看this

标签: pytorch backpropagation autograd


【解决方案1】:

我不相信 pytorch 中有这样的功能,即使它非常难以阅读。您可以做的是使用您导出的公式为您的层实现自定义 backward 方法,然后通过设计知道反向传播就是您想要的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-22
    • 2020-05-12
    • 1970-01-01
    • 2018-11-17
    • 1970-01-01
    • 2021-09-11
    相关资源
    最近更新 更多