【问题标题】:How to convert Pytorch autograd.Variable to Numpy?如何将 Pytorch autograd.Variable 转换为 Numpy?
【发布时间】:2017-11-04 13:38:53
【问题描述】:

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

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

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

【问题讨论】:

    标签: numpy pytorch tensor


    【解决方案1】:

    两种可能的情况

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

      x.data.numpy()

      RuntimeError: 不支持 FloatTensor 的 numpy 转换

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

      x.data.cpu().numpy()

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

      x.data.numpy()

    【讨论】:

    • 是的,我做到了。我回答了我自己的问题。但无论如何它已经消失了。
    • 我想特别提到这一点,因为很多人都面临这个问题。干杯!!
    • 这与x.cpu().data.numpy()np.asarray(torch_tensor) 相比如何?找不到任何提及这一点的文档
    • 如果您想继续在 GPU 上训练张量,您必须复制 numpy 数组,然后在此之后运行 x.data.cuda(),不是吗? (或者 numpy 数组是否会保留......也许?)
    【解决方案2】:

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

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

    【讨论】:

    • 非常感谢!当我尝试使用 plt.imshow() 绘制张量时出现此错误。这行得通...谢谢
    • 这仅适用于 a 是 CPU 张量,如果它在 GPU 上,它将失败(请参阅@blitu12345 的答案)
    猜你喜欢
    • 2020-06-27
    • 2019-06-13
    • 2021-02-24
    • 2018-04-19
    • 2020-02-09
    • 2019-10-23
    • 2020-03-16
    • 1970-01-01
    • 2019-04-27
    相关资源
    最近更新 更多