Pytorch优化器的调度程序中,参数`last_epoch`是用来干什么的?

12
关于 Pytorch 优化器的调度器(Schedulers),last_epoch 参数的实际含义是什么?
它的说明如下:
``` last_epoch (int) – 最后一个 epoch 的索引。默认值:-1。 ```
但对于像我这样刚开始了解这些调度器的人来说,它并没有多少解释。
我已经阅读了大部分甚至全部的文档,但对于它的作用和原理还是不太理解。
1个回答

9
last_epoch参数用于在恢复训练时,想要从上次停止的位置开始调度。每次调用调度程序的.step()时,它的值都会增加。默认值为-1,表示从头开始启动调度程序。
从文档中可以看到:

由于应该在每个批次后而不是每个时期后调用step(),因此该数字表示计算的总批次数,而不是计算的总时期数。当last_epoch=-1时,计划从头开始。

例如,
>>> import torch
>>> cc = torch.nn.Conv2d(10,10,3)
>>> myoptimizer = torch.optim.Adam(cc.parameters(), lr=0.1)
>>> myscheduler = torch.optim.lr_scheduler.StepLR(myoptimizer,step_size=1, gamma=0.1)
>>> myscheduler.last_epoch, myscheduler.get_lr()
(0, [0.1])
>>> myscheduler.step()
>>> myscheduler.last_epoch, myscheduler.get_lr()
(1, [0.001])
>>> myscheduler.step()
>>> myscheduler.last_epoch, myscheduler.get_lr()
(2, [0.0001])

如果您决定在训练过程中停止,然后恢复训练,您可以向调度器提供last_epoch参数,以便从上次停止的地方开始训练,而不是重新从头开始。

>>> mynewscheduler = torch.optim.lr_scheduler.StepLR(myoptimizer,step_size=1, gamma=0.1, last_epoch=myscheduler.last_epoch)
>>> mynewscheduler.last_epoch, mynewscheduler.get_lr()
(3, [1.0000000000000004e-05])

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接