【问题标题】:Pytorch: Why is the memory occupied by the `tensor` variable so small?Pytorch:为什么`tensor`变量占用的内存这么小?
【发布时间】:2019-06-19 01:56:39
【问题描述】:

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

【问题讨论】:

    标签: python numpy pytorch tensor numpy-ndarray


    【解决方案1】:

    答案分为两部分。来自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,因为这是numpy 中的默认dtype,而torch 默认使用float32

    【讨论】:

    • 真的很棒的答案,会给指向storage 的指针再+1。非常有帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-31
    相关资源
    最近更新 更多