StudyAi
首页
课程
专栏
小组
问答
招聘
登录
注册
江户川柯北
真相只有一个!(#^.^#)
12554
访客
65
文章
219311
字数
3
粉丝
私信
关注
访问
Friendly Introduction
(广告:~~ 小兰的AI专栏 ~~)
DataSize BatchSize EpochSize Iterations Steps的关系
5个月前
2711字
219阅读
0评论
DataSize BatchSize EpochSize Iterations 的关系 # 基本解释 - `DataSize` 是数据集中的图片总数量,比如Mnist-Trainset有5W张图片 - `EpochSize` 是网络处理完数据集中所有图片算一个回合(epoch)。`EpochSize`是一个回合总共包含多少个批次。`epoch_size=data_size//batch_size`。 - `Epoch_Nums` 或 `Max_Epochs` 是打算让网络训练多少个回合。一般直接设定此参数值。 - `BatchNums` 是一个回合中有多少个批次`batch`,`batch_nums=DataSize//BatchSize`,通常由其他参数计算所得,同epoch_size。 - `BatchSize` 是每个批次输入的图片数量为多少, 比如batch_size=64,一般直接设定此参数值。 - `Iterations` 是迭代次数, 每次迭代一个Batch。for (start_iter, max_iter, curr_iter) ... 。 - `Step` or `StartStep`, `MaxSteps` 同Iterations,即每迭代一个batch,算一个step。单循环控制中,MaxSteps任意设定,双循环控制中,MaxSteps即是BatchNums. # 流程控制 参考 https://github.com/amdegroot/ssd.pytorch/blob/master/train.py#L153 用迭代批次数 iterations 控制5类操作: print, plot, save, lr-adjust, (start, resume, stop)!! 利用上述变量之间的相互关系,有以下几种控制条件: 1. 判断回合开始, epoch start 2. 判断回合结束, epoch end 3. 判断当前Iteration是否需要打印结果,比如是每10个iterations打印一次 4. 判断iterations,绘制 loss/accuracy 曲线, 比如epoch-loss曲线, iter-loss曲线 5. 判断iterations,调整学习速率 learning-rate 6. 判断iterations,决定网络的运行节奏,启动,重启,停止. 7. 判断Epochs数量,保存中间模型,checkpoint. # 代码举栗 ``` # 方案一 单循环控制 for iteration in range(start_iter, max_iter): if (not batch_iterator) or (iteration % epoch_size == 0): # 第一回合开始 or 当前回合结束 # create batch iterator batch_iterator = iter(data_loader) # load train data images, targets = next(batch_iterator) ``` ``` # 方案二 双循环控制 for epoch in range(start_epoch, max_epochs): data_iter = iter(dataloader) # other temp vars for current epoch, eg loss, accuracy for step in range(batch_nums) # step 也经常被写为 batch, iteration data = data_iter.next() out = model(data) loss = Loss(out, data.label) # .... model.save(xxx_xxepoch.ckpt) ``` # 损失计算 参考 https://github.com/amdegroot/ssd.pytorch/blob/master/train.py#L153 **回合-损失曲线 epoch-loss**:反映的是,在训练过程中,每个epoch点上的loss如何变化, 是该回合内所有batch上的平均损失,因此要除以一个回合内的batch数,即除以epoch_size。 每过一个epoch, 曲线更新一个点,即 epoch_plot:(epoch, loc_loss, conf_loss)。 其中的(loc_loss, conf_loss)是该epoch内所有batch上的平均损失。 **批次-损失曲线 batch-loss or iter-loss**:反映的是,在训练过程中,每个iter点/batch点上的loss如何变化, 是该批次内所有images上的累积损失, 不需要除以该批次内的images数,即不除以batch_size。 每迭代(iter)一次,曲线更新一个点,即 iter_plot: (iter, loss_l, loss_c)。 其中的(loss_l, loss_c)是该batch内所有images上的累积损失,记为该batch/(或该iter)的损失。 每次迭代,只处理一个batch,故亦可称之为 batch_plot,又称之为 iter_polt。 回合损失,批次损失,都反应单个batch上loss的变化情况,但前者是多个batch的平均loss,后者是每个batch的loss. 回合损失曲线比批次损失曲线更光滑,但后者对训练过程的反映更加精细。 迭代次数(iterations)会引起歧义,迭代多个回合可以有迭代次数,迭代多个批次也有迭代次数,迭代多张图片也有迭代次数。 因此,只说迭代多少次往往引起歧义,不知道到底是哪个层次的迭代,应该明确指明迭代多少个回合,or 迭代多少个批次,or 迭代多少张图片。 用 迭代回合数,迭代批次数,迭代图片数,来描述比较明确。而不是笼统的说迭代次数是多少!! 比较约定俗称的一种写法,是将迭代次数等效为batch数目,整个训练过程迭代多少次意思就是迭代了多少个batch,即iterations<=>batches。
收藏 (0)
打赏
点赞 (0)
热门评论
到顶端
发布^_^
powerd by studyai.com 2017