当前位置: 代码迷 >> 综合 >> 解决 batch_sampler option is mutually exclusive with batch_size, shuffle, sampler, and drop_last
  详细解决方案

解决 batch_sampler option is mutually exclusive with batch_size, shuffle, sampler, and drop_last

热度:89   发布时间:2023-12-16 07:35:43.0

 因为我再dataloader中传入了drop_last=True,就报错ValueError: batch_sampler option is mutually exclusive with batch_size, shuffle, sampler, and drop_last,看源码发现问题所在,因为参数设置的冲突导致,我设置batch_sampler这个参数,一旦指定了这个参数,那么batch_size,shuffle,sampler,drop_last就不能再制定了(互斥——Mutually exclusive)

dataset(Dataset): 传入的数据集batch_size(int, optional): 每个batch有多少个样本shuffle(bool, optional): 在每个epoch开始的时候,对数据进行重新排序sampler(Sampler, optional): 自定义从数据集中取样本的策略,如果指定这个参数,那么shuffle必须为Falsebatch_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。默认为0worker_init_fn (callable, optional): 每个worker初始化函数 If not None, this will be called on eachworker subprocess with the worker id (an int in [0, num_workers - 1]) asinput, after seeding and before data loading. (default: None)

 

  相关解决方案