DataLoader

class DataLoader(dataset, batch_size=None, shuffle=False, sampler=None, last_batch=None, batch_sampler=None, batchify_fn=None, num_workers=0, pin_memory=False, pin_device_id=0, prefetch=None, thread_pool=False, timeout=120)

Loads data from a dataset and returns mini-batches of data.

Parameters:
dataset : Dataset

Source dataset. Note that numpy and mxnet arrays can be directly used as a Dataset.

batch_size : int

Size of mini-batch.

shuffle : bool

Whether to shuffle the samples.

sampler : Sampler

The sampler to use. Either specify sampler or shuffle, not both.

last_batch : {‘keep’, ‘discard’, ‘rollover’}

How to handle the last batch if batch_size does not evenly divide len(dataset).

keep - A batch with less samples than previous batches is returned. discard - The last batch is discarded if its incomplete. rollover - The remaining samples are rolled over to the next epoch.

batch_sampler : Sampler

A sampler that returns mini-batches. Do not specify batch_size, shuffle, sampler, and last_batch if batch_sampler is specified.

batchify_fn : callable

Callback function to allow users to specify how to merge samples into a batch. Defaults to default_batchify_fn:

def default_batchify_fn(data):
    if isinstance(data[0], nd.NDArray):
        return nd.stack(*data)
    elif isinstance(data[0], tuple):
        data = zip(*data)
        return [default_batchify_fn(i) for i in data]
    else:
        data = np.asarray(data)
        return nd.array(data, dtype=data.dtype)
num_workers : int, default 0

The number of multiprocessing workers to use for data preprocessing.

pin_memory : boolean, default False

If True, the dataloader will copy NDArrays into pinned memory before returning them. Copying from CPU pinned memory to GPU is faster than from normal CPU memory.

pin_device_id : int, default 0

The device id to use for allocating pinned memory if pin_memory is True

prefetch : int, default is num_workers * 2

The number of prefetching batches only works if num_workers > 0. If prefetch > 0, it allow worker process to prefetch certain batches before acquiring data from iterators. Note that using large prefetching batch will provide smoother bootstrapping performance, but will consume more shared_memory. Using smaller number may forfeit the purpose of using multiple worker processes, try reduce num_workers in this case. By default it defaults to num_workers * 2.

thread_pool : bool, default False

If True, use threading pool instead of multiprocessing pool. Using threadpool can avoid shared memory usage. If DataLoader is more IO bounded or GIL is not a killing problem, threadpool version may achieve better performance than multiprocessing.

timeout : int, default is 120

The timeout in seconds for each worker to fetch a batch data. Only modify this number unless you are experiencing timeout and you know it’s due to slow data loading. Sometimes full shared_memory will cause all workers to hang and causes timeout. In these cases please reduce num_workers or increase system shared_memory size instead.