在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。
答案 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
默认情况下。