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
,Transform
和Collator
组合在一起,使其可以灵活地从数据集中连续获取小批量数据。- 参数
dataset (
Dataset
) – 需要从中分批加载的数据集。num_workers (
int
) – 加载、转换和整理批次的子进程数量。0
表示使用单进程。 默认:0timeout (
int
) – 如果为正,则表示从 worker 那里收集批次的超时值(秒)。 默认:0timeout_event (
Callable
) – 超时触发的回调函数,默认引发运行时错误。divide (
bool
) – 定义多进程模式下的并行策略。True
表示一个批次被分成num_workers
块,worker 将并行处理这些块。False
表示不同的子进程会处理不同的批次。 默认:Falsepreload (
bool
) – 是否开启 dataloader 的预加载策略。 开启该策略时, dataloader 将提前把一个 batch 的数据加载到 device memory 里, 这样可以加速训练过程。 预加载过程中,所有 map、list、tuple 里的值都会被转化成Tensor
, 你会得到Tensor
而不是原先的 Numpy array 或者 Python number.
注解
通过开启预加载策略, tensor 的 host2device 拷贝和 device 上 kernel 执行将会部分重叠, 这将会加速训练, 代价是较高的 device 内存占用(因为会多出一个 batch 的数据)。 当你的训练时间很短或者你的每个 device 的 PCIe 带宽很低的时候, 这个策略将会省很多训练的时间。