深度之眼学习心得
实验:人民币二分类,训练一个二分类器,可以区别出第四套人民币的1元与100元。
模型训练的5大步骤,数据,模型,损失函数,优化器,迭代训练
本文只探讨数据。
数据:数据收集---img,label
数据分割---train,valid,test
数据读取---DataLoader(Sampler(生成索引),Dataset(根据索引拿到img and label))
数据预处理---transforms
DataLoader:构建可迭代的数据装载器
torch.utils.data.DataLoader(dataset,batch_size=1,shuffle=False,sampler=None,batch_sampler=None,num_workers=0,
collate_fn=None,pin_memory=None,drop_last=False,timeout=0,worker_init_fn=None,multiprocessing_context=None)
dataset:Dataset类,决定数据从哪儿读及如何读
batch_size:批大小
shuffle:训练样本的每个epoch是否乱序
num_workers:读取数据的进程数量
drop_last:当样本数不能被batch_size整除时,是否舍弃最后一批数据。
三个常用名称之间的关系:
epoch:所有训练样本都输入到模型中一次,称之为一个epoch
iteration:一批样本输入到模型中,称之为一个iteration
batch_size:一批样本的样本个数,称之为batch_size,它决定一个epoch有多少个iteration。
例如:一个epoch为120个样本,若batch_size=10,那么有12个iteration
一个epoch为125个样本,若batch_size=10,drop_last=True,那么有12个iteration
drop_last=False,那么有13个iteration,最后一个iteration样本数量<batch_size
Dataset:Dataset抽象类,所有自定义的Dataset需要继承它,并且复写__getitem__(),getitem接收索引并返回样本(img,label)
数据读取:读哪些数据:每个iteration应该读哪batch_size个样本,Sampler输出的Index
从哪儿读数据:设置硬盘数据路径,Dataset中的data_dir
如何读取数据:Dataset中的getitem
数据读取如图:
博客写的不规范,主要为了便于查找及知识记忆。
下一篇将数据预处理--transforms