我想實作這種學習率方法,如論文中的注意力就是你所需要的。我在 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 =
uj5u.com熱心網友回復:
由于這是在流行論文中使用的調度程式(您只需要注意),因此在線已經存在相當好的實作。
您可以通過@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()
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/323918.html
