bert4torch.optimizers module

bert4torch.optimizers.extend_with_exponential_moving_average(model, decay=0.999)[source]

模型权重的指数滑动平均, 不参加梯度更新,只是记录滑动平均的参数,给预测使用 注意区别于类似adam一类的自适应学习率优化器, 针对一阶二阶梯度的指数滑动平均, 两者完全不同

Example:
>>> # 初始化
>>> ema = ExponentialMovingAverage(model, 0.999)
>>> # 训练过程中, 更新完参数后, 同步update ema_weights weights
>>> def train():
>>>     optimizer.step()
>>>     ema.step()
>>> # eval前, 调用apply_ema_weights(); eval之后, restore_raw_weights()恢复原来模型的参数
>>> def evaluate():
>>>     ema.apply_ema_weights()
>>>     # evaluate
>>>     # 如果想保存ema后的模型, 请在restore方法之前调用torch.save()
>>>     ema.restore_raw_weights()
bert4torch.optimizers.get_linear_schedule_with_warmup(optimizer, num_warmup_steps, num_training_steps, last_epoch=-1)[source]

带warmup的schedule, 源自transformers包optimization.py中

Parameters
  • num_warmup_steps – 需要warmup的步数, 一般为 num_training_steps * warmup_proportion(warmup的比例, 建议0.05-0.15)

  • num_training_steps – 总的训练步数, 一般为 train_batches * num_epoch