【发布时间】:2021-02-09 14:36:38
【问题描述】:
我正在微调 BERT 模型。首先,我想冻结图层并进行一些训练。当某个回调被触发时(比如说ReduceLROnPlateau)我想解冻层。我该怎么做?
【问题讨论】:
标签: python nlp pytorch bert-language-model
我正在微调 BERT 模型。首先,我想冻结图层并进行一些训练。当某个回调被触发时(比如说ReduceLROnPlateau)我想解冻层。我该怎么做?
【问题讨论】:
标签: python nlp pytorch bert-language-model
恐怕 PyTorch 中的学习率调度程序不提供挂钩。查看ReduceLROnPlateauhere的实现,当调度器被触发时,两个属性被重置(i.e.当它识别一个平台并降低学习率时):
if self.num_bad_epochs > self.patience:
self._reduce_lr(epoch)
self.cooldown_counter = self.cooldown
self.num_bad_epochs = 0
基于此,您可以包装您的调度程序步骤调用,并通过检查 scheduler.cooldown_counter == scheduler.cooldown 和 scheduler.num_bad_epochs == 0 是否为真来确定是否触发了 _reduce_lr。
【讨论】: