小编mex*_*mex的帖子

PyTorch线性代数梯度

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

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

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

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

非常感谢

python linear-algebra pytorch

7
推荐指数
1
解决办法
800
查看次数

Anaconda环境中的“从源安装”

我想做的是:

  • 我正在使用macOS和Anaconda 2。
  • 我想从源代码安装Python包(特别是PyTorch)。
  • 我想在Anaconda环境中安装所有依赖项和程序包本身。
  • 我不希望该Anaconda环境成为默认的/根Anaconda环境,而是我特别创建的用于安装此软件包及其从源代码进行依赖的环境。

我做了什么:

首先,我创建了如下环境

conda create --name my_env python=3.5
Run Code Online (Sandbox Code Playgroud)

现在,从源代码安装PyTorch的说明如下:

export CMAKE_PREFIX_PATH=[anaconda root directory]
conda install numpy pyyaml setuptools cmake cffi
git clone --recursive https://github.com/pytorch/pytorch
MACOSX_DEPLOYMENT_TARGET=10.9 CC=clang CXX=clang++ python setup.py install
Run Code Online (Sandbox Code Playgroud)

现在,我的问题是:

  1. 遵循此说明,要求我指定anaconda root directory要在其中CMAKE_PREFIX_PATH.设置所有内容的目录my_env
  2. 为从源及其依赖项安装的软件包创建额外的环境是否合理?为什么要这样做?我的动机主要是担心有一天我可能会花很多时间来搞砸我的系统,因此希望将事情彻底分开。

如果您只能回答两个问题之一,那将不胜感激。谢谢!

python anaconda pytorch

6
推荐指数
1
解决办法
1046
查看次数

PyTorch,nn.Sequential(),访问nn.Sequential()中特定模块的权重

这应该是一个快速的.当我在PyTorch中使用预定义模块时,我通常可以非常轻松地访问其权重.但是,如果我先将模块包装在nn.Sequential()中,如何访问它们?请看下面的玩具示例

class My_Model_1(nn.Module):
    def __init__(self,D_in,D_out):
        super(My_Model_1, self).__init__()
        self.layer = nn.Linear(D_in,D_out)
    def forward(self,x):
        out = self.layer(x)
        return out

class My_Model_2(nn.Module):
    def __init__(self,D_in,D_out):
        super(My_Model_2, self).__init__()
        self.layer = nn.Sequential(nn.Linear(D_in,D_out))
    def forward(self,x):
        out = self.layer(x)
        return out

model_1 = My_Model_1(10,10)
print(model_1.layer.weight)
model_2 = My_Model_2(10,10)
# How do I print the weights now?
# model_2.layer.0.weight doesn't work.
Run Code Online (Sandbox Code Playgroud)

python pytorch

3
推荐指数
2
解决办法
7615
查看次数

numpy,用来自其他矩阵的行填充稀疏矩阵

我很难弄清楚什么是最有效的方法来执行以下操作:

import numpy as np

M = 10
K = 10
ind = np.array([0,1,0,1,0,0,0,1,0,0])
full = np.random.rand(sum(ind),K)
output = np.zeros((M,K))
output[1,:] = full[0,:]
output[3,:] = full[1,:]
output[7,:] = full[2,:]
Run Code Online (Sandbox Code Playgroud)

我想构建输出,它是一个稀疏矩阵,其行以密集矩阵(完整)给出,行索引通过二进制矢量指定。理想情况下,我想避免循环。那可能吗?如果没有,我正在寻找最有效的方法。

我需要多次执行此操作。ind和full会不断变化,因此,我仅提供了一些示例值进行说明。我希望ind相当稀疏(最多10%),M和K都很大(10e2-10e3)。最终,我可能需要在pytorch中执行此操作,但是对于numpy来说,一些不错的过程已经使我步入正轨。

如果您对此问题有一个或多个适当的类别,也请帮助我找到该问题的更适当的标题。

非常感谢,马克斯

python indexing numpy sparse-matrix slice

2
推荐指数
1
解决办法
390
查看次数