gpt4 book ai didi

python - pytorch 为从 numpy 创建张量做了什么

转载 作者:行者123 更新时间:2023-12-04 14:58:21 28 4
gpt4 key购买 nike

当我调用 torch.from_numpy 时,我对 torch 做了什么很感兴趣。顾名思义,PyTorch 似乎创建了一个 Tensor 实例并分配了内存,用于将内容从 numpy ndarray 复制到自身。但是 PyTorch 如何执行 memcpy 工作以及 PyTorch 在后台还做了什么?似乎张量的实现在 autograd 中.但我不知道应该寻找哪一部分。

我有这个问题,因为我发现从 numpy 构建张量真的很快。而且它甚至比直接创建张量还要快

a = np.random.randn(100,100)
%timeit torch.from_numpy(a)
759 ns ± 7.53 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
%timeit torch.randn(100,100)
61 µs ± 2.46 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)
%timeit torch.zeros(100,100)
3.1 µs ± 136 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

最佳答案

documentation解释说

The returned tensor and ndarray share the same memory. Modifications to the tensor will be reflected in the ndarray and vice versa. The returned tensor is not resizable.

这些句子暗示不涉及 memcopy(否则修改不会相互反射(reflect))。这就是操作如此之快的原因:pytorch 仅创建一个指向底层数据的 numpy 数组的指针,并将该指针“分配”给一个张量。 此函数根本不分配或复制任何内存。因此,from_numpy 只是复制一个指针(它是一个整数)并且可能执行一些检查。

重要的是要记住底层内存是共享的,因此张量和 numpy 数组相互修改,你应该使用 clonecopy 来执行干净的深层复制并摆脱这种行为(如果需要),例如

b = torch.from_numpy(a).clone()

关于python - pytorch 为从 numpy 创建张量做了什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67465094/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com