Pytorch笔记:

Dataloader与Dataset:

DataLoader 是一个迭代器,最基本的使用方法就是传入一个 Dataset 对象,它会根据参数 batch_size 的值生成一个 batch 的数据,节省内存的同时,它还可以实现多进程、数据打乱等处理。

Dataset是用来解决数据从哪里读取以及如何读取的问题。

DataLoader的功能是构建可迭代的数据装载器,在训练的时候,每一个for循环,每一次Iteration,就是从DataLoader中获取一个batch_size大小的数据。

Dataloader常用参数:

  • dataset表示Dataset类,它决定了数据从哪读取以及如何读取;

  • batch_size表示批大小;

  • num_works表示是否多进程读取数据,0表示只有主进程;

  • shuffle表示每个epoch是否乱序;

  • drop_last表示当样本数不能被batch_size整除时,是否舍弃最后一批数据;

这里提到了epoch,所有训练样本都已输入到模型之中,称为一个Epoch,也就说将样本都训练一遍,称为一个Epoch。一批样输入到模型中,这样称为一个Iteration决定一个Epoch有多少个Iteration,为批次大小Batchsize

举个例子,假如样本总数为80,设置的Batchsize为8,那么输入模型一次就输入8个样本,1 Epoch = 10 Iteration(或者是step),这是正好可以整除的例子。假如样本总数为87,设置的Batchsize为8,那么是有10个Iteration还是11个Iteration?这就需要看drop_last参数了,如果设置为True,那就是10个Iteration,相当于舍弃了7个样本,如果设置为False,那就是11个Iteration,最后一个Iteration比前面的Iteration样本个数要少。

DataLoader的数据读取机制

首先,在for循环中使用了DataLoader,进入DataLoader后,首先根据是否使用多进程DataLoaderIter,做出判断之后单线程还是多线程,接着使用Sampler得索引Index,然后将索引给到DatasetFetcher,在这里面调用Dataset,根据索引,通过getitem得到实际的数据和标签,得到一个batch size大小的数据后,通过collate_fn函数整理成一个Batch Data的形式输入到模型去训练。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值