【发布时间】: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