Мне просто интересно, как python элементы объекта сохраняются в памяти. Кажется, что python объекты занимают намного меньше места в памяти, чем они должны. Рассмотрим следующий код:
import torch
import torchvision
import torchvision.transforms as transforms
transform = transforms.Compose(
[transforms.ToTensor(),
transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))])
trainset = torchvision.datasets.CIFAR10(root='./data', train=True,
download=True, transform=transform)
trainloader = torch.utils.data.DataLoader(trainset, batch_size=4,
shuffle=True, num_workers=2)
testset = torchvision.datasets.CIFAR10(root='./data', train=False,
download=True, transform=transform)
testloader = torch.utils.data.DataLoader(testset, batch_size=4,
shuffle=False, num_workers=2)
Данные Cifar 10 занимают 177 МБ на моем жестком диске. Однако размер trainset, trainloader, testset,
и testloader
кажется очень маленьким (примерно 1 МБ). Как это происходит? Я проверил исходный код torchvision.datasets.CIFAR10 . Кажется, python загружает целые данные в память при создании объекта trainset
или trainset
. Я также подозреваю, что следующая техника, вероятно, не является хорошим методом для получения точного размера объекта. В таком случае, Как мне измерить фактический размер объекта?
from pympler import asizeof # need to install pympler package
asizeof.asizeof(trainset) + asizeof.asizeof(trainloader) + asizeof.asizeof(testset)+asizeof.asizeof(testloader)
>>>1097968