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

lar*_*ang 3 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)
Run Code Online (Sandbox Code Playgroud)

a_size是262288。b_size是72。

Jat*_*aki 6

答案分为两部分。根据的文档sys.getsizeof,首先

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

因此可能是因为张量__sizeof__未定义或与您期望的定义不同-您不能依靠此函数。其次

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

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

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

注:我设置dtypefloat64明确,因为这是默认dtypenumpy,而torch使用float32默认。

  • 真的很棒的答案,会为指向“存储”的指针提供另一个+1。知道超级有帮助! (3认同)