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])