每次重启后降低最大学习率

时间:2020-06-17 11:18:05

标签: python deep-learning pytorch gradient-descent sgd

我正在训练神经网络来完成基于计算机视觉的任务。对于优化器,我发现在整个培训过程中使用单个学习率并不是理想的选择,而人们所做的就是使用学习率调度器以特定方式衰减学习率。为此,我尝试了PyTorch's CosineAnnealingWarmRestarts().的作用是,它以余弦方式退火/降低了初始学习速率(由我们设置),直到重新启动为止。在该“重新启动”之后,学习率被设置回初始学习率,并且该循环再次发生。这对我来说效果很好,但是我想对其进行一些更改。我想更改学习率,每次重新启动后都会分配优化器,因此每次重新启动后,优化器的最大学习率也会降低。可以在PyTorch中完成吗?

1 个答案:

答案 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