DataLoader
DataLoader返回一个迭代器,该迭代器根据 batch_sampler
给定的顺序迭代一次给定的 dataset
DataLoader支持单进程和多进程的数据加载方式,当 num_workers
大于0时,将使用多进程方式异步加载数据。
DataLoader当前支持 map-style
和 iterable-style
的数据集, map-style
的数据集可通过下标索引样本,请参考 paddle.io.Dataset
; iterable-style
数据集只能迭代式地获取样本,类似Python迭代器,请参考 paddle.io.IterableDataset
。
batch_sampler
请参考 paddle.io.BatchSampler
禁用自动组batch
在如NLP等任务中,用户需求自定义组batch的方式,不希望 DataLoader
自动组batch, DataLoader
支持在 batch_size
和 batch_sampler
均为None的时候禁用自动组batch功能,此时需求从 dataset
中获取的数据为已经组好batch的数据,该数据将不做任何处理直接传到 collate_fn
或 default_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_generator
和 set_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)
代码示例