18

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

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

有什么办法可以规避这个吗?

4

2 回答 2

29

两种可能的情况

  • 使用 GPU:如果您尝试将 cuda 浮点张量直接转换为 numpy,如下所示,它将引发错误。

    x.data.numpy()

    RuntimeError:不支持 FloatTensor 的 numpy 转换

    因此,您不能将 cuda 浮点张量直接转换为 numpy,而必须先将其转换为 cpu 浮点张量,然后尝试转换为 numpy,如下所示。

    x.data.cpu().numpy()

  • 使用 CPU:转换 CPU 张量是直截了当的。

    x.data.numpy()

于 2017-06-04T06:49:53.357 回答
7

我找到了方法。实际上,我可以先Tensor使用autograd.Variable. a.data然后剩下的部分真的很简单。我只是a.data.numpy()用来获取等效的numpy数组。以下是步骤:

a = a.data  # a is now torch.Tensor
a = a.numpy()  # a is now numpy array
于 2017-06-03T06:12:06.117 回答