【问题标题】:Decrease the maximum learning rate after every restart每次重启后降低最大学习率
【发布时间】:2020-06-17 11:18:05
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    在我看来,一个直接的解决方案就是从CosineAnnealingWarmRestarts 继承,然后在覆盖的step 函数中更改其self.optimizer 参数。在伪代码中,这类似于

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-01-08
      • 2020-10-22
      • 2020-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多