获取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 方法,然后通过设计知道反向传播正是您想要的。