Pytorch:保存大张量列表的最佳实践?

Aer*_*ysS 5 pytorch

我使用张量进行转换,然后将其保存在列表中。稍后,我将使用它作为数据集Dataset,最后DataLoader训练我的模型。为此,我可以简单地使用:

l = [tensor1, tensor2, tensor3,...]
dataset = Dataset.TensorDataset(l)
dataloader = DataLoader(dataset)
Run Code Online (Sandbox Code Playgroud)

我想知道这样做的最佳实践是什么,以避免 RAM 溢出(如果大小增长)l?类似的事情Iterator可以避免吗?

vah*_*ero 2

保存张量

for idx, tensor in enumerate(dataloader0):
    torch.save(tensor, f"{my_folder}/tensor{idx}.pt")
Run Code Online (Sandbox Code Playgroud)

创建数据集

class FolderDataset(Dataset):
   def __init__(self, folder):
       self.files = os.listdir(folder)
       self.folder = folder
   def __len__(self):
       return len(self.files)
   def __getitem__(self, idx):
       return torch.load(f"{self.folder}/{self.files[idx]}")
Run Code Online (Sandbox Code Playgroud)

然后你可以实现你自己的数据加载器。如果无法将整个数据集保存在内存中,则需要加载一些文件系统。