关于Pytorch Optimizer 的 Schedulers,这个参数实际上意味着什么last_epoch
?
它说
\n\n\n\n
last_epoch (int)
\xe2\x80\x93 上一个纪元的索引。默认:-1
。
但对于像我这样刚刚了解这些时间表的人来说,它并没有真正解释太多。
\n我阅读了大部分文档(如果不是全部的话),并且我可以理解它的作用和原因。
\nlast_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])
Run Code Online (Sandbox Code Playgroud)
现在,如果您决定在中间停止训练,然后恢复训练,您可以向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])
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5227 次 |
最近记录: |