我正在阅读下面的文章。它使用EMA衰减的变量。
Bidirectional Attention Flow for Machine Comprehension
在训练期间,模型的所有权重的移动平均值以0.999的指数衰减率保持。
他们使用TensorFlow,我找到了EMA的相关代码。
https://github.com/allenai/bi-att-flow/blob/master/basic/model.py#L229
在PyTorch中,如何将EMA应用于变量?
我正在阅读下面的文章。它使用EMA衰减的变量。
Bidirectional Attention Flow for Machine Comprehension
在训练期间,模型的所有权重的移动平均值以0.999的指数衰减率保持。
他们使用TensorFlow,我找到了EMA的相关代码。
https://github.com/allenai/bi-att-flow/blob/master/basic/model.py#L229
在PyTorch中,如何将EMA应用于变量?
2条答案
按热度按时间j13ufse21#
通过拥有一个带有自定义更新规则的模型副本,可以为模型变量实现指数移动平均(EMA)。
首先,创建模型的副本以存储参数的移动平均值:
然后,定义EMA更新函数,它将在每个训练步骤后更新模型参数的移动平均值:
最后,在每个优化步骤之后,在训练循环中调用update_ema_variables函数:
使用此代码,您可以在训练期间维护模型参数的移动平均值。ema_model将保存EMA参数,您可以使用它进行评估或推断。
或者,也有一些具有简单 Package 器的库,例如https://github.com/fadel/pytorch_ema
hujrc8aj2#
移动平均线是梯度下降中动量的关键概念。
在PyTorch document中,您可以找到:
optimizer = torch.optim.SGD(model.parameters(), lr=0.1, momentum=0.9)
将参数
momentum
更改为所需的值。