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。
答案分为两部分。根据的文档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)
注:我设置dtype
要float64
明确,因为这是默认dtype
的numpy
,而torch
使用float32
默认。
归档时间: |
|
查看次数: |
499 次 |
最近记录: |