Pytorch tenor.save () создает огромные файлы для небольших тензоров из MNIST - PullRequest
2 голосов
/ 26 февраля 2020

Я работаю с набором данных MNIST из Chagange Chagange и у меня проблемы с предварительной обработкой данных. Кроме того, я не знаю, каковы лучшие практики, и мне было интересно, не могли бы вы посоветовать мне это.

Отказ от ответственности: я не могу просто использовать torchvision.datasets.mnist, потому что мне нужно использовать данные Kaggle для обучение и сдача.

В этом учебном пособии было рекомендовано создать объект Dataset, загружающий из файлов тензоры .pt, чтобы полностью использовать графический процессор. Для этого мне нужно было загрузить данные CSV, предоставленные Kaggle, и сохранить их в виде файлов .pt:

import pandas as pd
import torch
import numpy as np

# import data
digits_train = pd.read_csv('data/train.csv')

train_tensor = torch.tensor(digits_train.drop(label, axis=1).to_numpy(), dtype=torch.int)
labels_tensor = torch.tensor(digits_train[label].to_numpy()) 

for i in range(train_tensor.shape[0]):
    torch.save(train_tensor[i], "data/train-" + str(i) + ".pt")

Каждый train_tensor[i].shape равен torch.Size([1, 784])

Однако каждый такой файл .pt имеет размер около 130 МБ. Тензор того же размера со случайно сгенерированными целыми числами имеет размер 6,6 КБ. Почему эти тензоры такие огромные, и как я могу уменьшить их размер?

Набор данных составляет 42 000 выборок. Должен ли я вообще беспокоиться о пакетировании этих данных? Должен ли я заняться сохранением тензоров в отдельные файлы, а не загружать их все в ОЗУ, а затем разделять на части? Какой здесь самый оптимальный подход?

1 Ответ

3 голосов
/ 27 февраля 2020

Как объяснено в в этом обсуждении , torch.save() сохраняет весь тензор, а не только срез. Вам необходимо явно скопировать данные, используя clone().

Не беспокойтесь, во время выполнения данные распределяются только один раз, если вы явно не создаете копии.

Как общий совет: если данные легко помещаются в вашу память, просто загрузите их сразу. Для MNIST с 130 МБ это, безусловно, так.

Однако я все равно собираю данные, потому что они сходятся быстрее. Узнайте больше о преимуществах SGD.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...