在 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。

最佳答案

答案分为两部分。从 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 ,而 0x231518 使用 0x231318 默认值 0x231318。

关于python - Pytorch:为什么 `tensor`变量占用的内存这么小?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54361763/

10-13 00:03