Ответ состоит из двух частей. Из документации 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
Примечание. Я явно устанавливаю dtype
на float64
, поскольку это значение по умолчанию dtype
в numpy
, тогда как torch
использует float32
по умолчанию.