将PyTorch变量复制到Numpy数组

4
假设我在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数组。
2个回答

3

这是一个非常有趣的问题。在我看来,这个问题有点基于个人观点,我想分享一下我的看法。

从上述两种方法中,我更喜欢第一种(使用clone())。因为你的目标是复制信息,所以你需要额外的内存空间。由于创建numpy桥不会导致额外的内存消耗,clone()copy()应该占用相似的存储空间。此外,我没有理解你所说的copy()将创建两个numPy数组的意思。正如你提到的,clone()copy()更快,我没有看到使用clone()会有其他问题。

如果有人能提供一些反对意见,我很乐意重新考虑这个问题。


感谢您的回答。我编辑了我的问题以澄清“两个numpy”部分。 - Fábio Perez

0

因为clone()AD记录,所以第二个选项不那么强烈。你还可以考虑几个选项


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接