首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PyTorch线性代数梯度

PyTorch线性代数梯度
EN

Stack Overflow用户
提问于 2017-06-29 23:32:17
回答 2查看 1.3K关注 0票数 10

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

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

然而,我想知道是否有一个更优雅(也可能更快)的解决方案,我可以直接重写"Type Variable etc implement stateless method svd“错误,调用Lapack,等等?

如果有人能指导我完成适当的步骤和我需要查看的源文件,我将不胜感激。我认为这些步骤也同样适用于目前没有相关反向方法的其他线性代数操作。

EN

回答 2

Stack Overflow用户

发布于 2018-04-15 20:50:27

具有向前和向后传递功能的torch.svd现在在Pytorch master中可用:

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

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

票数 2
EN

Stack Overflow用户

发布于 2021-03-26 20:34:07

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

如果输入不是满秩或具有不唯一的奇异值,则使用UVh计算的

梯度可能不稳定。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44829420

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档