【问题标题】:Copying a PyTorch Variable to a Numpy array将 PyTorch 变量复制到 Numpy 数组
【发布时间】:2018-08-17 03:39:00
【问题描述】:

假设我在 GPU 中有一个 PyTorch 变量:

var = Variable(torch.rand((100,100,100))).cuda()

复制(不是桥接)这个变量到 NumPy 数组的最佳方法是什么?

var.clone().data.cpu().numpy()

var.data.cpu().numpy().copy()

通过运行快速基准测试,.clone().copy() 稍快。但是,.clone() + .numpy() 将创建一个 PyTorch 变量和一个 NumPy 桥,而.copy() 将创建一个 NumPy 桥 + 一个 NumPy 数组。

【问题讨论】:

    标签: numpy deep-learning pytorch tensor


    【解决方案1】:

    因为clone()recorded by AD,第二个选项不那么强烈。有few options你也可以考虑。

    【讨论】:

      【解决方案2】:

      这是一个非常有趣的问题。据我说,这个问题有点基于意见,我想就此分享我的意见。

      从以上两种方法中,我更喜欢第一种(使用clone())。由于您的目标是复制信息,因此本质上您需要投入额外的内存。 clone()copy() 应该占用相似的存储量,因为创建 numpy 桥不会导致额外的内存。另外,我不明白你的意思,copy() 将创建两个 numPy 数组。正如你提到的,clone()copy() 快,我认为使用 clone() 没有任何其他问题。

      如果有人可以提供一些反驳论点,我很想再考虑一下。

      【讨论】:

      • 感谢您的回答。我编辑了我的问题以澄清“两个 numpy”部分。
      猜你喜欢
      • 2018-09-20
      • 2018-12-30
      • 2019-06-13
      • 1970-01-01
      • 2021-08-18
      • 2020-09-29
      • 2016-04-07
      • 2019-04-27
      • 1970-01-01
      相关资源
      最近更新 更多