Pytorch:为什么tensor变量占用的内存这么小?

时间:2019-01-25 08:48:09

标签: python numpy pytorch tensor numpy-ndarray

在Pytorch 1.0.0中,我发现tensor变量占用的内存很小。我不知道它如何存储这么多数据。 这是代码。

a = np.random.randn(1, 1, 128, 256)
b = torch.tensor(a, device=torch.device('cpu'))

a_size = sys.getsizeof(a)
b_size = sys.getsizeof(b)

a_size是262288。b_size是72。

1 个答案:

答案 0 :(得分:6)

答案分为两个部分。首先从sys.getsizeof的文档开始

  

所有内置对象都将返回正确的结果,但是对于第三方扩展,这不一定成立,因为它是特定于实现的。

所以对于张量__sizeof__可能是未定义的或与您期望的定义不同的东西-您不能依靠此函数。其次

  

仅考虑直接归因于对象的内存消耗,而不考虑其引用的对象的内存消耗。

表示如果torch.Tensor对象仅持有对实际内存的引用,则不会在sys.getsizeof中显示。确实是这种情况,如果您查看基础storage的大小,则会看到预期的数字

import torch, sys
b = torch.randn(1, 1, 128, 256, dtype=torch.float64)
sys.getsizeof(b)
>> 72
sys.getsizeof(b.storage())
>> 262208

注意:我将dtype显式设置为float64,因为这是dtype中的默认numpy,而torch使用float32默认情况下。