Dataloader剖析

前言

在pytorch中的数据加载到模型的操作顺序是这样的
1 创建一个Dataset对象
2 创建一个Dataloader对象
3 循环这个Dataloader对象,将img,label加载到模型中进行训练

dataset = MyDataset()
dataloader = DataLoader(dataset)
num_epoches = 100
for epoch in range(num_epoches):
      for img,label in dataloader :
          ...........

所以,作为直接对数据进入模型的关键一步,DataLoader相当重要。
首先介绍下DataLoader他是pytorch中数据读取的一个重要接口,该接口定义在dataloader.py中,只要不是用户进行重写,一般都要用到该接口,该接口的目的:将自定义的Dataset根据batch size大小,是否shuffle等封装成一个Batch size 大小的Tensor,用于后面的训练。

官方对DataLoader的说明是:

数据加载由数据集和采样器组成,基于Python的单、多进程的iterators来处理数据

DataLoader

先介绍下DataLoader(object)的参数:

  • 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就不能再制定了(互斥——Mutually exclusive)
  • 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
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容