数据读取机制Dataloader与Dataset
数据分为四个模块文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/50525.html
Sampler:生成索引文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/50525.html
DataSet:根据索引读取图片及标签。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/50525.html
DataLoader 与 Dataset
torch.utils.data.DataLoader
功能:构建可迭代的数据装载器文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/50525.html
- dataset : Dataset 类,决定数据从哪读取
及如何读取 - batchsize : 批大小
- num\_works : 是否多进程读取数据(减少时间,加速模型训练)
- shuffle:每个 epoch 是否乱序
- drop\_last :当样本数不能被 batchsize 整除时,是否舍弃最后一批数据
区分Epoch、Iteration、Batchsize
Epoch: 所有训练样本都已输入到模型中,称为一个 Epoch文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/50525.html
Iteration:一批样本输入到模型中,称之为一个 Iteration文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/50525.html
Batchsize:批大小,决定一个 Epoch 有多少个 Iteration文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/50525.html
样本总数: 80 Batchsize 8文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/50525.html
1 Epoch = 10 Iteration文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/50525.html
样本总数: 87 Batchsize 8文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/50525.html
1 Epoch = 10 Iteration?drop\_last = True文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/50525.html
1 Epoch = 11 Iteration?drop\_last = False文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/50525.html
torch.utils.data.Dataset
功能:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/50525.html
Dataset 抽象类,所有自定义的Dataset 需要继承它,并且复写\_getitem\_()文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/50525.html
getitem:接收一个索引,返回一个样本文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/50525.html
关于读取数据
通过debug详解数据的读取过程文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/50525.html
DataLoader根据是否采用多进程,进入DataLoaderIter,使用Sampler获取index,再通过索引调用DatasetFetcher,在硬盘中读取imgandLabel,通过collate\_fn整理成一个batchData。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/50525.html
文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunda/50525.html