Python 为什么张量变量占用的内存这么小?
在Pytorch 1.0.0中,我发现Python 为什么张量变量占用的内存这么小?,python,numpy,pytorch,tensor,numpy-ndarray,Python,Numpy,Pytorch,Tensor,Numpy Ndarray,在Pytorch 1.0.0中,我发现张量变量占用的内存非常小。我想知道它是如何存储这么多数据的。 这是密码 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_大小为262288b_大小为72。答案分为两部分。从文献资料来看,首先 所有内置对象都将返回正确的结果,但这对
张量变量占用的内存非常小。我想知道它是如何存储这么多数据的。
这是密码
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_大小为262288<代码>b_大小
为72。答案分为两部分。从文献资料来看,首先
所有内置对象都将返回正确的结果,但这对于第三方扩展不一定是真的,因为它是特定于实现的
因此,对于张量,\uuuuu sizeof\uuuu
可能是未定义的,或者定义方式与您预期的不同-此函数不是您可以依赖的。其次
只考虑直接归因于对象的内存消耗,而不考虑它所指对象的内存消耗
这意味着,如果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
注意:我明确地将dtype
设置为float64
,因为这是numpy
中的默认dtype
,而torch
默认使用float32
。非常好的答案,会给指向存储的指针另一个+1。超级有帮助的知道!