我正在实现一个自定义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目前还不支持复值张量反向传播,我已经通过处理单独的实张量和虚张量创建了自己的复数表示)
发布于 2021-02-21 08:14:27
我不相信pytorch中有这样的功能,即使它是相当不可读的。您可以做的是使用您导出的公式为您的层实现一个自定义的backward方法,然后通过设计知道反向传播就是您想要的。
https://stackoverflow.com/questions/63844935
复制相似问题