我正在训练神经网络来完成基于计算机视觉的任务。对于优化器,我发现在整个培训过程中使用单个学习率并不是理想的选择,而人们所做的就是使用学习率调度器以特定方式衰减学习率。为此,我尝试了PyTorch's
CosineAnnealingWarmRestarts().
的作用是,它以余弦方式退火/降低了初始学习速率(由我们设置),直到重新启动为止。在该“重新启动”之后,学习率被设置回初始学习率,并且该循环再次发生。这对我来说效果很好,但是我想对其进行一些更改。我想更改学习率,每次重新启动后都会分配优化器,因此每次重新启动后,优化器的最大学习率也会降低。可以在PyTorch中完成吗?
答案 0 :(得分:0)
在我看来,直接的解决方案只是从CosineAnnealingWarmRestarts
继承,然后在重写的self.optimizer
函数内更改其step
参数。用伪代码,就像
class myScheduler(torch.optim.lr_scheduler.CosineAnnealingWarmRestarts):
def __init__(self,
optimizer,
T_0,
T_mult=1,
eta_min=0,
last_epoch=-1):
#initialize base calss
super().__init__(.... blablabla ...)
def step(self):
#call step() from base class
#Do some book-keeping to determine if you've hit a restart
#now change optimizer lr for each parameter group
if some_condition:#condition like number of iterations, restarts, etc
self.optimizer.param_groups[i]['lr']*=some_coef