在 Pytorch 中实现自定义学习率调度器?
Implementing custom learning rate scheduler in Pytorch?
我想实现这种学习率方法,正如论文中所描述的那样,Attention is all you need。我在 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 =
由于这是一篇流行论文 (Attention is all you need) 中使用的调度程序,因此网上已经存在相当不错的实现。
您可以从 this repository by @jadore801120 获取 PyTorch 实现。
一旦你拥有它,那么简单
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()
我想实现这种学习率方法,正如论文中所描述的那样,Attention is all you need。我在 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 =
由于这是一篇流行论文 (Attention is all you need) 中使用的调度程序,因此网上已经存在相当不错的实现。
您可以从 this repository by @jadore801120 获取 PyTorch 实现。
一旦你拥有它,那么简单
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()