微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

获取Pytorch autograd用于计算梯度的精确公式

如何解决获取Pytorch autograd用于计算梯度的精确公式

我正在实现带有一些自定义模块的自定义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目前不支持复数值张量的反向传播,因此我通过处理单独的实数和虚数张量创建了自己的复数表示形式)

解决方法

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。