如何将Pytorch autograd.Variable转换为Numpy?

时间:2017-06-03 05:57:58

标签: numpy pytorch tensor

标题说明了一切。我想将PyTorch autograd.Variable转换为等效的numpy数组。在official documentation他们提倡使用a.numpy()获取等效的numpy数组(PyTorch tensor)。但这给了我以下错误:

  

回溯(最近一次调用最后一次):文件" stdin",第1行,在模块中   文件   " /home/bishwajit/anaconda3/lib/python3.6/site-packages/torch/autograd/variable.py" ;,   第63行,在 getattr 中引发AttributeError(name)AttributeError:   numpy的

有什么办法可以绕过这个吗?

2 个答案:

答案 0 :(得分:23)

两种可能的情况

  • 使用GPU :如果您尝试将cuda float-tensor直接转换为numpy,如下所示,则会产生错误。

      

    x.data.numpy()

         

    RuntimeError:不支持FloatTensor的numpy转换

    所以,你不能将cuda float-tensor直接转换为numpy,而则必须首先将其转换为cpu float-tensor,然后尝试转换为numpy,如下所示。

      

    x.data.cpu()。numpy的()

  • 使用CPU:转换CPU张量很简单。

      

    x.data.numpy()

答案 1 :(得分:4)

我找到了方法。实际上,我可以先使用Tensorautograd.Variable中提取a.data数据。然后其余部分非常简单。我只是使用a.data.numpy()来获取等效的numpy数组。以下是步骤:

a = a.data  # a is now torch.Tensor
a = a.numpy()  # a is now numpy array