ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

DataLoader源代码剖析

2021-12-20 09:34:29  阅读:350  来源: 互联网

标签:dataloader DataLoader worker batch 剖析 sampler 源代码 optional


前言

  • dataloader  本质是一个可迭代对象,使用  iter()  访问,不能使用  next()  访问;
  • 使用   iter(dataloader)  返回的是一个迭代器,然后可以使用   next  访问;
  • 也可以使用  `for inputs, labels in dataloaders`  进行可迭代对象的访问;
  • 一般我们实现一个 datasets 对象,传入到  dataloader  中;然后内部使用  yeild  返回每一次  batch  的数据;

 

pytorch 的数据加载到模型的操作顺序是这样的:

  ① 创建一个 Dataset 对象
  ② 创建一个 DataLoader 对象
  ③ 循环这个 DataLoader 对象,将img, label加载到模型中进行训练

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

  所以,作为直接对数据进入模型中的关键一步, DataLoader非常重要。

 

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
  • worker subprocess with the worker id (an int in [0, num_workers - 1]) as
  • input, after seeding and before data loading. (default: None)

 

标签:dataloader,DataLoader,worker,batch,剖析,sampler,源代码,optional
来源: https://www.cnblogs.com/BlairGrowing/p/15709472.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有