【问题标题】:PyTorch Linear Algebra GradientsPyTorch 线性代数梯度
【发布时间】:2017-12-03 09:47:30
【问题描述】:

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

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

但是,我想知道是否有更优雅(并且可能更快)的解决方案,我可以直接覆盖“类型变量不实现无状态方法 svd”错误,调用 Lapack 等?

如果有人可以指导我完成我需要查看的适当步骤和源文件,我将不胜感激。我想这些步骤同样适用于目前没有关联反向方法的其他线性代数运算。

【问题讨论】:

    标签: python linear-algebra pytorch


    【解决方案1】:

    torch.svd 现在可以在 Pytorch 主控器中使用前向和后向传递:

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-13
        • 2020-02-10
        • 2018-02-26
        • 1970-01-01
        • 2018-10-14
        • 1970-01-01
        相关资源
        最近更新 更多