【发布时间】:2020-09-07 10:56:32
【问题描述】:
我需要加载时间序列数据集来训练网络。当我从原始数据中提取这些.npy 文件时,由于内存问题,数据集被分成许多块train_x_0.npy、train_x_1.npy、...、train_x_40.npy(41 个块)。但是,它们的大小太大(大约 1000 GB),我无法将所有内容加载到 RAM 中。我一直在考虑两种方法来解决这个问题。
- 使用
np.load()和参数mmap_mode='r+'加载数据块。内存映射的块存储在 Python 列表self.data中。在PytorchDataset类的__getitem__(self, idx)方法中,我将idx转换为chunk_idx和sample_idx,然后通过self.data[chunk_idx][sample_idx]获取样本。 - 再次从原始数据中提取
.npy文件,并逐个样本保存数据,即一个.npy文件现在是一个样本,而不是一个数据块。在__getitem__(self, idx)方法中,我将通过使用np.load(sample_path)加载它来获取一个样本。
假设 Pytorch DataLoader 将用于遍历所有样本,那么哪种方法会更快?
如果您对提取原始数据或加载.npy 文件有其他建议,请分享您的意见。
【问题讨论】:
标签: deep-learning pytorch numpy-memmap