将 PyTorch 变量复制到 Numpy 数组

Copying a PyTorch Variable to a Numpy array

假设我在 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 数组。

这是一个很有趣的问题。在我看来,这个问题有点opinion-based,我想谈谈我的看法。

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

如果有人可以提供一些反驳论据,我很乐意对此再考虑一下。

因为clone()recorded by AD second options is less intense. There are 你也可以考虑。