DataLoader

    DataLoader返回一个迭代器,该迭代器根据 batch_sampler 给定的顺序迭代一次给定的 dataset

    DataLoader支持单进程和多进程的数据加载方式,当 num_workers 大于0时,将使用多进程方式异步加载数据。

    DataLoader当前支持 map-styleiterable-style 的数据集, map-style 的数据集可通过下标索引样本,请参考 paddle.io.Datasetiterable-style 数据集只能迭代式地获取样本,类似Python迭代器,请参考 paddle.io.IterableDataset

    batch_sampler 请参考 paddle.io.BatchSampler

    禁用自动组batch

    在如NLP等任务中,用户需求自定义组batch的方式,不希望 DataLoader 自动组batch, DataLoader 支持在 batch_sizebatch_sampler 均为None的时候禁用自动组batch功能,此时需求从 dataset 中获取的数据为已经组好batch的数据,该数据将不做任何处理直接传到 collate_fndefault_collate_fn 中。

    注解

    当禁用自动组batch时, default_collate_fn 将不对输入数据做任何处理。

    参数:

    • dataset (Dataset) - DataLoader从此参数给定数据集中加载数据,此参数必须是 paddle.io.Dataset 或 的一个子类实例。

    • feed_list (list(Tensor)|tuple(Tensor)) - feed变量列表,由 paddle.static.data() 创建。当 return_list 为False时,此参数必须设置。默认值为None。

    • places (list(Place)|tuple(Place)) - 数据需要放置到的Place列表。在静态图和动态图模式中,此参数均必须设置。在动态图模式中,此参数列表长度必须是1。默认值为None。

    • return_list (bool) - 每个设备上的数据是否以list形式返回。若return_list = False,每个设备上的返回数据均是str -> Tensor的映射表,其中映射表的key是每个输入变量的名称。若return_list = True,则每个设备上的返回数据均是list(Tensor)。在动态图模式下,此参数必须为True。默认值为False。

    • batch_sampler (BatchSampler) - paddle.io.BatchSampler 或其子类的实例,DataLoader通过 batch_sampler 产生的mini-batch索引列表来 dataset 中索引样本并组成mini-batch。默认值为None。

    • batch_size (int|None) - 每mini-batch中样本个数,为 batch_sampler 的替代参数,若 batch_sampler 未设置,会根据 batch_size shuffle drop_last 创建一个 paddle.io.BatchSampler 。默认值为1。

    • shuffle (bool) - 生成mini-batch索引列表时是否对索引打乱顺序,为 batch_sampler 的替代参数,若 batch_sampler 未设置,会根据 batch_size shuffle drop_last 创建一个 paddle.io.BatchSampler 。默认值为False。

    • collate_fn (callable) - 通过此参数指定如果将样本列表组合为mini-batch数据,当 collate_fn 为None时,默认为将样本个字段在第0维上堆叠(同 np.stack(..., axis=0) )为mini-batch的数据。默认值为None。

    • num_workers (int) - 用于加载数据的子进程个数,若为0即为不开启子进程,在主进程中进行数据加载。默认值为0。

    • use_shared_memory (bool) - 是否使用共享内存来提升子进程将数据放入进程间队列的速度,该参数尽在多进程模式下有效(即 num_workers > 0 ),请确认机器上有足够的共享内存空间(如Linux系统下 /dev/shm/ 目录空间大小)再设置此参数。默认为False。

    • timeout (int) - 从子进程输出队列获取mini-batch数据的超时时间。默认值为0。

    • worker_init_fn (callable) - 子进程初始化函数,此函数会被子进程初始化时被调用,并传递 worker id 作为参数。默认值为None。

    返回:迭代 dataset 数据的迭代器,迭代器返回的数据中的每个元素都是一个Tensor。

    返回类型: DataLoader

    代码示例

    from_generator ( feed_list=None, capacity=None, use_double_buffer=True, iterable=True, return_list=False, use_multiprocess=False, drop_last=True )

    警告

    这个API将在未来版本废弃,推荐使用支持多进程并发加速的 paddle.io.DataLoader

    注解

    框架保证DataLoader的数据加载顺序与用户提供的数据源读取顺序一致。

    创建一个DataLoader对象用于加载Python生成器产生的数据。数据会由Python线程预先读取,并异步送入一个队列中。

    本方法创建的DataLoader对象提供了3个方法设置数据源,分别是 set_sample_generator , set_sample_list_generatorset_batch_generator 。请查阅下述示例代码了解它们的使用方法。

    如果iterable = True,本方法创建的DataLoader对象是一个Python生成器,可以for-range的方法循环迭代。

    如果iterable = False,本方法创建的DataLoader对象提供 start()reset() 方法控制数据读取过程。

    参数:

    • feed_list (list(Tensor)|tuple(Tensor)) - feed变量列表,由 paddle.static.data() 创建。

    • use_double_buffer (bool) - 是否使用 double_buffer_reader 。若use_double_buffer=True,DataLoader会异步地预读取下一个batch的数据,可加速数据读取过程,但同时会占用少量的CPU/GPU存储,即一个batch输入数据的存储空间。

    • return_list (bool) - 每个设备上的数据是否以list形式返回。仅在iterable = True模式下有效。若return_list = False,每个设备上的返回数据均是str -> LoDTensor的映射表,其中映射表的key是每个输入变量的名称。若return_list = True,则每个设备上的返回数据均是list(LoDTensor)。推荐在静态图模式下使用return_list = False,在动态图模式下使用return_list = True。

    • use_multiprocess (bool) - 设置是否是用多进程加速动态图的数据载入过程。注意:该参数的设置仅在动态图模式下有效, 在静态图模式下,该参数设置与否均无任何影响。默认值为False。

    • drop_last (bool): 是否丢弃最后的不足CPU/GPU设备数的批次。默认值为True。在网络训练时,用户不能设置drop_last=False,此时所有CPU/GPU设备均应从DataLoader中读取到数据。在网络预测时,用户可以设置drop_last=False,此时最后不足CPU/GPU设备数的批次可以进行预测。

    返回: 被创建的DataLoader对象

    返回类型: loader (DataLoader)

    代码示例 1

    代码示例 2

    代码示例 3

    from_dataset ( dataset, places, drop_last=True )

    警告

    这个API将在未来版本废弃,推荐使用支持多进程并发加速的

    创建一个DataLoader对象用于加载Dataset产生的数据。目前,Dataset仅支持Linux系统下使用。

    参数:

    • dataset (InMemoryDataset|QueueDataset) - Dataset对象。

    • places (list(CUDAPlace)|list(CPUPlace)) - DataLoader对象返回数据所在的place。

    返回: 被创建的DataLoader对象,可以for-range的方式循环迭代

    返回类型: loader (DataLoader)

    代码示例