Я использую 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