当前位置:   article > 正文

关于dataset和dataLoader怎样封装数据_从dataloader取数据再封装成loader

从dataloader取数据再封装成loader

使用pytorch进行模型训练时,我们通常会将数据包装成dataLoader,然后放入模型进行训练。dataLoader实质上就是一个数据加载器,必须要传入一个数据集类dataset。pytorch提供的dataset是一个抽象类,需要自己实现该类。继承dataset需要实现getitem和len两个方法,具体如下:

  1. class MyDataSet(Dataset):
  2. def __init__(self, imgs, labels):
  3. self._data = imgs
  4. self._label = labels
  5. def __getitem__(self,idx):
  6. img = self._data[idx]
  7. label = self._label[idx]
  8. return img,label
  9. def __len__(self):
  10. return len(self._data)

然后将dataset传入dataloader中:

  1. my_dataSet = MyDataSet(imgs, labels)
  2. dataloader = DataLoader(dataset=my_dataSet, batch_size=batch_size, num_workers=device_num, shuffle=True)

关于dataloader的具体参数,如下(可自己查看官方文档),

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)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/木道寻08/article/detail/987992
推荐阅读
  

闽ICP备14008679号