假设一共1000个samples,batch size=4,因此一个epoch会有250 iterations,也就是会更新250次
当设置Trainer时
trainer = pl.Trainer(gpus=1, precision=32, callbacks=[logger], max_steps=40, accumulate_grad_batches=2)
这个max_steps
指的是最多更新的次数,这里也就是40次,而accumulate_grad_batches
指的是每次更新前积累多少个batch,这里为2
因此,每次更新前实际上积累了2 * 4 = 8个samples的gradients(当然是取了平均),而最多更新40次,因此最后训练完看到完成的iterations则是80,因为两个iterations被积累到一起来更新
注意:不论这个max_steps
和accumulate_grad_batches
是多少,训练时显示的log永远都是正常训练(无梯度累计)时的样子
Epoch 0: 32%|▎| 80/250 [02:41<05:39, 2.00s/it, loss=0.85, v_num=15, train/loss_simple_step=0.820, train/loss_v
即,这个250不会因为我们要累计两个batches而变成125,而是保持为250,且训练完后可以看到完成了80个iterations
默认情况下,Pytorch Lightning在每个epoch结束后,会保存一次模型,每个epoch包含多少iterations是固定的,不会因为max_steps
和accumulate_grad_batches
的改变而改变,在上面的例子中即250。在最后一次更新完成后也会保存一次模型,不论是在epoch末尾还是中间。
值得注意的是,一个epoch后保存下载的模型的名称
epoch=0-step=124.ckpt
这个step代表的是目前为止一共更新的次数,而不是iterations的数量。比如这个在epoch0结束后保存的模型,一共经历了125个更新steps,而每次step其实积累了两个batch,即两个iterations.文章来源:https://www.toymoban.com/news/detail-550921.html
还需注意,默认情况Pytorch Lightning只会保存最新的model,然后会删掉之前保存的旧的model文章来源地址https://www.toymoban.com/news/detail-550921.html
到了这里,关于Pytorch Lightning 训练更新次数的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!