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