PyTorch线性代数梯度

时间:2017-06-29 15:32:17

标签: python linear-algebra pytorch

我希望通过奇异值分解来反向传播渐变以用于正则化目的。 PyTorch目前不支持通过奇异值分解进行反向传播。

我知道我可以编写自己的自定义函数来操作变量;取其.data张量,将torch.svd应用于它,将变量包裹在其奇异值周围并在前向传递中返回,在后向传递中将适当的雅可比矩阵应用于传入的渐变。

然而,我想知道是否有更优雅(并且可能更快)的解决方案,我可以覆盖"类型变量不会实现无状态方法svd"直接出错,请致电Lapack等?

如果有人可以指导我完成我需要查看的相应步骤和源文件,我将非常感激。我认为这些步骤同样适用于当前没有相关后向方法的其他线性代数运算。

非常感谢

2 个答案:

答案 0 :(得分:1)

Pytorch master中现在提供带前进和后退传递的

torch.svd

http://pytorch.org/docs/master/torch.html#torch.svd

您需要从源代码安装Pytorch: https://github.com/pytorch/pytorch/#from-source

答案 1 :(得分:0)

PyTorch 的 torch.linalg.svd 操作支持梯度计算,但注意:

<块引用>

如果输入不是满秩或具有非唯一奇异值,则使用 UVh 计算的梯度可能不稳定。