Уменьшайте максимальную скорость обучения после каждого перезапуска - PullRequest
1 голос
/ 17 июня 2020

Я обучаю нейронную сеть для задачи на основе компьютерного зрения. Что касается оптимизатора, я обнаружил, что использовать одну скорость обучения для всего обучения не идеально, и что люди делают, так это то, что они используют планировщики скорости обучения, чтобы снизить скорость обучения определенным образом. Чтобы сделать это, я попробовал PyTorch's CosineAnnealingWarmRestarts().. Он отжигает / уменьшает начальную скорость обучения (установленную нами) косинусоидальным образом, пока не произойдет перезапуск. После этого «перезапуска» скорость обучения возвращается к начальной скорости обучения, и цикл повторяется снова. У меня это сработало очень хорошо, но я хотел внести в него несколько изменений. Я хотел изменить скорость обучения, оптимизатор назначается после каждого перезапуска, чтобы после каждого перезапуска максимальная скорость обучения для оптимизатора также уменьшалась. Можно ли это сделать в PyTorch?

1 Ответ

0 голосов
/ 17 июня 2020

Мне кажется, что простым решением было бы просто унаследовать от 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
...