为了正则化的目的,我希望通过奇异值分解来反向传播梯度。PyTorch目前不支持通过奇异值分解进行反向传播。
我知道我可以编写自己的自定义函数来操作变量;获取它的.data张量,对其应用torch.svd,将变量包装在它的奇异值周围,并在向前传递中返回它,然后在向后传递中将适当的雅可比矩阵应用于传入的梯度。
然而,我想知道是否有一个更优雅(也可能更快)的解决方案,我可以直接重写"Type Variable etc implement stateless method svd“错误,调用Lapack,等等?
如果有人能指导我完成适当的步骤和我需要查看的源文件,我将不胜感激。我认为这些步骤也同样适用于目前没有相关反向方法的其他线性代数操作。
发布于 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
发布于 2021-03-26 20:34:07
https://stackoverflow.com/questions/44829420
复制相似问题