Pytorch的DataLoader

Pytorch的DataLoader,第1张

DataLoader():由数据集和采样器组成,基于python的单、多进程的iterators来处理数据。

iterator 和 iterable 区别:iterators有__iter____next__方法,而iterable只有__iter__方法。

方法参数:

dataset(Dataset): 传入的数据集

batch_size(int, optional): 每个batch有多少个样本

shuffle(bool, optional): 在每个epoch开始的时候,对数据进行重新排序

sampler(Sampler, optional): 自定义从数据集中取样本的策略,如果指定参数,shuffle必为False

batch_sampler(Sampler, optional): 与sampler类似,一次只返回一个batch的indices(索引),指定该参数后 batch_size,shuffle,sampler,drop_last 就不能设置了。

num_workers (int, optional): 决定有几个进程处理data loading。0 意味着所有的数据都会被load进主进程。(默认为0)

collate_fn (callable, optional): 将一个list的sample组成一个mini-batch的函数

pin_memory (bool, optional): 如果设置为True,那么data loader将会在返回它们之前,将tensors拷贝到CUDA中的固定内存(CUDA pinned memory)中.

drop_last (bool, optional): 如果设置为True:这个是对最后的未完成的batch来说的,比如你的batch_size设置为64,而一个epoch只有100个样本,那么训练的时候后面的36个就被扔掉了…
如果为False(默认),那么会继续正常执行,只是最后的batch_size会小一点。

timeout(numeric, optional): 如果是正数,表明等待从worker进程中收集一个batch等待的时间,若超出设定的时间还没有收集到,那就不收集这个内容了。这个numeric应总是大于等于0。默认为0

worker_init_fn (callable, optional): 每个worker初始化函数 If not None, this will be called on each
worker subprocess with the worker id (an int in [0, num_workers - 1]) as
input, after seeding and before data loading. (default: None)

DataLoader 是 iterable 不是 iterator,iterator的实现在_DataLoaderIter。

① DataLoader本质上就是一个iterable(跟python的内置类型list等一样),并利用多进程来加速batch data的处理,使用yield来使用有限的内存

② Queue的特点

当队列里面没有数据时: queue.get() 会阻塞, 阻塞的时候,其它进程/线程如果有queue.put() *** 作,本线程/进程会被通知,然后就可以 get 成功。
当数据满了: queue.put() 会阻塞

③ DataLoader是一个高效,简洁,直观的网络输入数据结构,便于使用和扩展

参考:PyTorch学习笔记(6)——DataLoader源代码剖析_sooner高的博客-CSDN博客_dataloader返回值

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/870378.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-13
下一篇 2022-05-13

发表评论

登录后才能评论

评论列表(0条)

保存