进阶内容#
本节例子中假设你已经处于你的实验目录中,你的模型配置文件名为 resnet50.py
。
DTR#
BaseCls 支持利用 DTR 技术进行训练。相关知识内容请参考文档。
通过修改模型配置文件中的 dtr
相关字段开启:
cfg.dtr = True
也可以在终端中追加参数覆盖模型配置文件中的字段:
cls_train -f resnet50.py dtr True
AMP#
BaseCls 支持利用 AMP 自动混合精度进行训练,可以提升训练吞吐。相关知识内容请参考文档。
通过修改模型配置文件中的 amp
相关字段开启:
cfg.amp.enabled = True
也可以在终端中追加参数覆盖模型配置文件中的字段:
cls_train -f resnet50.py amp.enabled True
混合精度训练中使用 fp16 代替 fp32 进行梯度计算,因此会涉及浮点数表达能力的问题。为了防止小量级的梯度在 fp16 表示中损失精度,实践中往往将损失函数扩大适当的倍率,称为 loss_scale
,在 GradScaler
中实现了相关逻辑。
混合精度的默认行为是固定 loss_scale = 128.0
,另外一种动态调整 loss_scale
的方法可以更好地利用fp16的动态范围,可以使用 dynamic_scale
字段开启。开启时初始 loss_scale = 65536.0
,并每 2000
轮迭代进行一次翻倍,当遇到梯度为 inf
时会立即将其减半:
cfg.amp.dynamic_scale = True
Model EMA#
Model EMA 是一种加快模型收敛的方法,常用于较新的卷积模型和 Transformer 类模型。通过统计模型参数的滑动平均,能够获得更好的泛化能力。
通过修改模型配置文件中的 model_ema
相关字段开启,默认每步迭代都会更新 Model EMA:
cfg.model_ema.enabled = True
cfg.model_ema.momentum = 0.9999
cfg.model_ema.update_period = 1
也可以设置 update_period
隔一定步数进行更新,一个建议是当提升更新间隔时,要相应减小 momentum
的值:
cfg.model_ema.enabled = True
cfg.model_ema.momentum = 0.9992
cfg.model_ema.update_period = 8
另外如果对于设置正确的 momentum
没有经验,也可以设置 alpha
的默认配置,momentum
会根据更新间隔和更新量 alpha
自动适配:
cfg.model_ema.enabled = True
cfg.model_ema.alpha = 1e-5
cfg.model_ema.update_period = 32
相关更新公式为: