Реализация пользовательского планировщика скорости обучения в Pytorch?

#tensorflow #pytorch #transformer #attention-model

Вопрос:

Я хотел бы реализовать этот метод скорости обучения, так как в статье Внимание-это все, что вам нужно. У меня есть этот код в Tensorflow, но я хотел бы реализовать его и в Pytorch. Я знаю, что у Pytorch есть модули для этого (https://pytorch.org/docs/stable/_modules/torch/optim/lr_scheduler.html), но как я мог бы создать собственный планировщик? Или, может быть, один из вышеперечисленных lr_scheduler уже выполняет ту же функцию?

Код тензорного потока:

 class CustomSchedule(tf.keras.optimizers.schedules.LearningRateSchedule):
  def __init__(self, d_model, warmup_steps=4000):
    super(CustomSchedule, self).__init__()

    self.d_model = d_model
    self.d_model = tf.cast(self.d_model, tf.float32)

    self.warmup_steps = warmup_steps

  def __call__(self, step):
    arg1 = tf.math.rsqrt(step)
    arg2 = step * (self.warmup_steps ** -1.5)

    return tf.math.rsqrt(self.d_model) * tf.math.minimum(arg1, arg2)

learning_rate = CustomSchedule(d_model)

optimizer = tf.keras.optimizers.Adam(learning_rate, beta_1=0.9, beta_2=0.98,
                                     epsilon=1e-9)
 

Пайторч?

 import torch 

optimizer = torch.optim.Adam(model.parameters(), lr=0.0001, betas=(0.9, 0.98), eps=1e-9)

scheduler =
 

Ответ №1:

Поскольку это планировщик, используемый в популярной статье (внимание-это все, что вам нужно), достаточно хорошие реализации уже существуют в Интернете.

Вы можете получить реализацию PyTorch из этого репозитория по @jadore801120.

Как только вы его получите, тогда просто

 optimizer = torch.optim.Adam(model.parameters(), lr=0.0001, betas=(0.9, 0.98), eps=1e-9)
sched = ScheduledOptim(optimizer, d_model=..., n_warmup_steps=...)
 

также не забудьте вызвать планировщик в нужное время

 for i, batch in enumerate(dataloader):
    sched.zero_grad()
    ...
    loss.backward()
    sched.step_and_update_lr()
 

Комментарии:

1. хорошо, спасибо, я тоже нашел это репо