问题
最近用pytorch做实验时,遇到加载大量数据的问题。实验数据大小在400Gb,而本身机器的memory只有256Gb,显然无法将数据一次全部load到memory。
解决方法
首先自定义一个MyDataset继承torch.utils.data.Dataset,然后将MyDataset的对象feed in torch.utils.data.DataLoader()即可。MyDataset在__init__中声明一个文件对象,然后在__getitem__中缓慢读取数据,这样就不会一次把所有数据加载到内存中了。训练数据存放在train.txt中,每一行是一条数据记录。
import torch.utils.data as Data
from tqdm import tqdm
class MyDataset(Data.Dataset):
def __init__(self,filepath):
number = 0
with open(filepath,"r") as f:
# 获得训练数据的总行数
for _ in tqdm(f,desc="load training dataset"):
number+=1
self.number = number
self.fopen = open(filepath,'r')
def __len__(self):
return self.number
def __getitem__(self,index):
line = self.fopen.__next__()
# 自定义transform()对训练数据进行预处理
data = transform(line)
return data
train_dataset = MyDataset(filepath = "train.txt&