标题说明了一切。我想将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的
有什么办法可以绕过这个吗?
答案 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)
我找到了方法。实际上,我可以先使用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