pytorch 中的DataLoader

DataLoader的作用:通常在训练时我们会将数据集分成若干小的、随机的batch,这个操作当然可以手动操作,但是PyTorch里面为我们提供了API让我们方便地从dataset中获得batch,DataLoader就是干这事儿的。
在这里插入图片描述
它的本质是一个可迭代对象,一般的操作是:

创建一个dataset对象
创建一个DataLoader对象
遍历这个DataLoader对象,将data, label加载到模型中进行训练

#一个粗略的示意
dataset = torchvision.datasets.MNIST()  #从torchvision这个包里获得一个dataset对象
train_iter = torch.utils.data.DataLoader(dataset, batch_size = args.batch_size, shuffle = True)#创建DataLoader对象
for epoch in num(epochs):#将数据加载到模型之中
    for data, label in train_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就不能再制定了(互斥——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) 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PytorchDataLoader是一个方便的数据加载器,它可以批量地加载数据,并在训练神经网络时提供数据。DataLoader的主要作用是将数据集分成批次,并且在每个epoch对数据进行随机化,以避免模型过度拟合。 在使用DataLoader之前,需要先定义一个数据集,并将其传递给DataLoader。数据集需要实现__getitem__和__len__方法,以便DataLoader可以获取每个样本以及数据集的大小。 例如,一个简单的数据集可以如下所示: ```python class MyDataset(Dataset): def __init__(self, data): self.data = data def __getitem__(self, idx): return self.data[idx] def __len__(self): return len(self.data) ``` 然后,可以使用DataLoader对数据集进行批处理: ```python dataset = MyDataset(data) dataloader = DataLoader(dataset, batch_size=32, shuffle=True) ``` 在上面的代码,batch_size参数指定了每个批次的样本数量,shuffle参数指定是否对数据进行随机化。 一旦创建了DataLoader,就可以通过迭代器访问数据集的批次。例如: ```python for batch in dataloader: # 处理当前批次的数据 ``` 需要注意的是,每个批次返回的是一个tensor的列表,而不是单个tensor。这是因为在训练神经网络时,通常需要对输入数据和标签进行分离处理。因此,每个批次包含输入数据和对应的标签。可以使用torch.Tensor.split()方法将tensor列表分离成输入和标签。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值