Как сохранить загруженные данные в оперативной памяти при использовании torch.utils.data.DataLoder? - PullRequest
0 голосов
/ 25 апреля 2019

Я использую torch.utils.data.Dataloader для загрузки своих данных. Я сохранил свои данные в глобальной переменной python dict, когда dataloader загрузил их через функцию __getitem__ в объекте torch.utils.data.Dataset. Но он освободил всю память после каждой тренировочной эпохи. Затем он снова загрузил все данные с жесткого диска.

# in data.py file
from torch.utils.data import Dataset, DataLoader

PRELOAD_DATA = dict()

class Data(Dataset):
    def __init__(self, some_path):
        self.file_list = some_path  # a list contains all the file path

    def __len__(self):
        return len(self.file_list)

    def __getitem__(self, index):
        if index in PRELOAD_DATA:
            this_blob = PRELOAD_DATA[index]
        else:
            this_blob = load_data_from_disk(self.file_list[index])
            PRELOAD_DATA[index] = this_blob  # I try to store data in this line
        return this_blob

def multithread_dataloader(some_path):
    this_data = Data(some_path)
    this_dataloader = DataLoader(this_data, batch_size=1, shuffle=True, num_workers=8, drop_last=False)
    return this_dataloader
# in main.py file
from data import multithread_dataloader

file_path_list = ...  # a list contains all the file path
train_data = multithread_dataloader(file_path_list)
for epoch in range(100):
    for blob in train_data:
        # training
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...