Dataset and DataLoader
datase用来构造数据集,数据集应该支持索引 ,dataloader用来拿出一个mini-batch来供训练时快速使用。
复习:
- 用全部batch,可以提升计算速度,可以使用CPU、GPU的并行能力,在处理性能上会较慢
- 使用一个样本来随机梯度下降,可以帮助我我们跨过鞍点,但会导致优化时间过长,一个样本本没法使用并行计算能力,数据上下有关联
- 使用mini-batch平衡性能和时间的需求
对于epoch、batch-size、iterations的定义:
- epoch:所有训练样本fowrwad backward一次就是一个epoch(所有样本都参与训练)
- batch-size:一次forward backward训练时所用样本数量
- iteration:batch一共分了多少个,内层迭代分了多少次
- 假设1w样本,batch-size(mini-batch)为1k个,iteration=10
DataLoader:举例~batch-size=2,shuffle=True(训练样本随机,打乱顺序)
- dataset需要支持索引,需要知道长度
iterable loader,yield来产生下一个对象,用for循环把每个batch拿出来
How to define Dataset:
- Dataset 是一个抽象的类(不能实例化),通过继承来定义自己的类
- DataLoader是来帮助我们加载数据的类,可以实例化dataloader
- DiabetesDataset继承自Dataset类
- getitem是魔法方法,实例化之后,这个可以支持