DataLoader

class DataLoader(dataset, sampler=None, transform=None, collator=None, num_workers=0, timeout=0, timeout_event=raise_timeout_error, divide=False, preload=False)[源代码]

可用于在给定数据集上遍历并取得数据。

DataLoader 将数据集与 Sampler, TransformCollator 组合在一起,使其可以灵活地从数据集中连续获取小批量数据。

参数
  • dataset (Dataset) – 需要从中分批加载的数据集。

  • sampler (Optional[Sampler]) – 定义从数据集中采样数据的策略。

  • transform (Optional[Transform]) – 定义抽样批次的转换策略。 默认:None

  • collator (Optional[Collator]) – 定义了转换批次的合并策略。 默认:None

  • num_workers (int) – 加载、转换和整理批次的子进程数量。 0 表示使用单进程。 默认:0

  • timeout (int) – 如果为正,则表示从 worker 那里收集批次的超时值(秒)。 默认:0

  • timeout_event (Callable) – 超时触发的回调函数,默认引发运行时错误。

  • divide (bool) – 定义多进程模式下的并行策略。 True 表示一个批次被分成 num_workers 块,worker 将并行处理这些块。 False 表示不同的子进程会处理不同的批次。 默认:False

  • preload (bool) – 是否开启 dataloader 的预加载策略。 开启该策略时, dataloader 将提前把一个 batch 的数据加载到 device memory 里, 这样可以加速训练过程。 预加载过程中,所有 map、list、tuple 里的值都会被转化成 Tensor, 你会得到 Tensor 而不是原先的 Numpy array 或者 Python number.

注解

通过开启预加载策略, tensor 的 host2device 拷贝和 device 上 kernel 执行将会部分重叠, 这将会加速训练, 代价是较高的 device 内存占用(因为会多出一个 batch 的数据)。 当你的训练时间很短或者你的每个 device 的 PCIe 带宽很低的时候, 这个策略将会省很多训练的时间。