timm 文档

优化

Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始使用

优化

本页面包含 timm 中包括的学习率优化器的 API 参考文档。

优化器

工厂函数

timm.optim.create_optimizer

< >

( args model filter_bias_and_bn = True )

向后兼容的旧优化器工厂。注意:使用 create_optimizer_v2 适用于新代码。

timm.optim.create_optimizer_v2

< >

( model_or_params opt: str = 'sgd' lr: Optional = None weight_decay: float = 0.0 momentum: float = 0.9 foreach: Optional = None filter_bias_and_bn: bool = True layer_decay: Optional = None param_group_fn: Optional = None **kwargs )

参数

  • model_or_params (nn.Module) — 包含待优化参数的模型 opt — 要创建的优化器名称 lr — 初始学习率 weight_decay — 在优化器中应用的权重衰减 momentum — 基于动量的优化器中的动量 (其他可能通过 kwargs 使用 betas) foreach — 如果为 True / False,启用/禁用 foreach(多张量)操作。如果为 None,选择安全默认值。filter_bias_and_bn — 从权重衰减中过滤偏置、bn 和其他 1 维参数 **kwargs — 传递给特定优化器的额外参数

创建一个优化器。

待办事项:当前模型被传递,所有参数均用于优化。对于更通用的情况,应提供一个接口,允许选择要优化的参数和 lr 组,例如:

  • 一个过滤器fn接口,将参数以与weight_decay兼容的方式进一步分组
  • 公开参数接口,并留给调用者决定

优化器类

timm.optim.AdaBelief

< >

( params lr = 0.001 betas = (0.9, 0.999) eps = 1e-16 weight_decay = 0 amsgrad = False decoupled_decay = True fixed_decay = False rectify = True degenerated_to_sgd = True )

参数

  • params (可迭代对象) — 要优化的参数的迭代器或定义参数组的字典
  • lr (浮点数,可选) — 学习率(默认:1e-3)
  • betas (浮点数元组,可选) — 用于计算梯度及其平方的运行平均值系数(默认:(0.9, 0.999))
  • eps (浮点数,可选) — 添加到分母以改善数值稳定性的项(默认:1e-16)
  • weight_decay (浮点数,可选) —— 权重衰减(L2惩罚)(默认:0)
  • amsgrad (布尔值,可选) —— 是否使用来自于论文《On the Convergence of Adam and Beyond》中的此算法的 AMSGrad 变体(默认:False)
  • decoupled_decay (布尔值,可选) —— (默认:True) 如果设为 True,则优化器使用AdamW中的解除耦合权重衰减
  • fixed_decay (布尔值,可选) — (默认:False) 这在weightdecouple设置为True时使用。当fixed_decay == True时,权重衰减按照$W{new} = W{old} - W{old} \times decay$执行。当fixed_decay == False时,权重衰减按照$W{new} = W{old} - W{old} \times decay \times lr$执行。注意,在这种情况下,权重衰减比随着学习率(lr)降低。
  • rectify (布尔值,可选) — (默认:True) 如果设置为True,则执行类似RAdam的校正更新
  • degenerated_to_sgd (布尔值,可选) (默认 —True) 如果设置为True,则在梯度方差较高时执行SGD更新

实现AdaBelief算法。修改自PyTorch中的Adam

参考:AdaBelief Optimizer,通过观察梯度的信任度来调整步骤大小,NeurIPS 2020

关于完整的推荐超参数表格,请参阅https://github.com/juntang-zhuang/Adabelief-Optimizer’ 例如,EfficientNet的训练/args请查看这些gists

步骤

< >

( closure = None )

参数

  • closure (callable, optional) — 一个重评估模型并返回损失的闭包。

执行一个优化步骤。

timm.optim.Adafactor

< >

( params lr = None eps = 1e-30 eps_scale = 0.001 eps_scale = 0.001 clip_threshold = 1.0 decay_rate = -0.8 betas = None weight_decay = 0.0 scale_parameter = True warmup_init = False )

参数

  • params (迭代) — 要优化的参数的迭代或定义参数组的字典
  • lr (浮点数,可选) — 外部学习率(默认:None)
  • eps (元组[float, float]) — 分别为平方梯度和参数缩放的正则化常数(默认:(1e-30, 1e-3))
  • clip_threshold (浮点数) — 最终梯度更新的均方根阈值(默认:1.0)
  • decay_rate (浮点数) — 用于计算平方梯度移动平均的系数(默认:-0.8)
  • beta1 (浮点数) — 用于计算梯度移动平均的系数(默认:None)
  • weight_decay (浮点数,可选) — 权重衰减(L2惩罚)(默认:0)
  • scale_parameter (布尔值) — 如果为True,则学习率通过参数的根均值平方进行缩放(默认:True)
  • warmup_init (布尔值) — 时间相关的学习率计算取决于是否使用预热初始化(默认:False)

实现了Adafactor算法。此实现基于:Adafactor:自适应学习率,内存成本线性(参见https://arxiv.org/abs/1804.04235

请注意,此优化器内部根据scale_parameterrelative_stepwarmup_init选项调整学习率。

要使用手动(外部)学习率计划,应将scale_parameter=Falserelative_step=False

步骤

< >

( closure = None )

参数

  • closure (可调用对象,可选) — 重新评估模型并返回损失的函数。

执行一个优化步骤。

timm.optim.Adahessian

< >

( params lr = 0.1 betas = (0.9, 0.999) eps = 1e-08 weight_decay = 0.0 hessian_power = 1.0 update_each = 1 n_samples = 1 avg_conv_kernel = False )

参数

  • params (可迭代项) — 要优化的参数的可迭代项或定义参数组的字典
  • lr (浮点数,可选) — 学习率(默认:0.1)
  • betas ((浮点数,浮点数),可选) — 用于计算梯度运行平均值和Hessian迹平方的系数(默认:(0.9, 0.999))
  • eps (浮点数,可选) — 加到分母中以改善数值稳定性(默认:1e-8)
  • weight_decay (浮点数,可选) — 权重衰减(L2 惩罚)(默认:0.0)
  • hessian_power (浮点数,可选) — Hessian 迹的指数(默认:1.0)
  • update_each (整数,可选) — 在 这个 步数后计算 Hessian 迹近似(以节省时间)(默认:1)
  • n_samples (整型,可选) —— 样本 z 的次数,以近似 hessian 迹 (默认: 1)

实现了来自“ADAHESSIAN:适用于机器学习的自适应二阶优化器”的 AdaHessian 算法

get_params

< >

( )

获取所有具有梯度的所有 param_groups 参数

set_hessian

< >

( )

计算 hessian 迹的 Hutchinson 近似,并为每个可训练参数累积。

步骤

< >

( closure = None )

参数

  • closure (可调用对象,可选) — 一个重评估模型并返回损失的闭包(默认 — None)

执行一个优化步骤。

zero_hessian

< >

( )

清空累加的海森矩阵痕迹。

timm.optim.AdamP

< >

( params lr = 0.001 betas = (0.9, 0.999) eps = 1e-08 weight_decay = 0 delta = 0.1 wd_ratio = 0.1 nesterov = False )

timm.optim.AdamW

< >

( params lr = 0.001 betas = (0.9, 0.999) eps = 1e-08 weight_decay = 0.01 amsgrad = False )

参数

  • params (可迭代对象) — 要优化的参数的迭代器或定义参数组字典
  • lr (float, 可选) — 学习率(默认:1e-3)
  • betas (浮点数元组,可选) — 用于计算梯度及其平方的移动平均的系数(默认:(0.9, 0.999))
  • eps (浮点数,可选) — 添加到分母的项以改善数值稳定性(默认:1e-8)
  • weight_decay (浮点数,可选) — 权重衰减系数(默认:1e-2)
  • amsgrad (布尔值,可选) — 是否使用论文《Adam及其超越的收敛性》中的AMSGrad算法变异(默认:False)

实现了AdamW算法。

原始的Adam算法在《Adam:用于随机优化的方法》中被提出。AdamW变异在《解耦权重衰减正则化》中被提出

.. _Adam:用于随机优化的方法: https://arxiv.org/abs/1412.6980 .. _解耦权重衰减正则化: https://arxiv.org/abs/1711.05101 .. _On the Convergence of Adam and Beyond: https://openreview.net/forum?id=ryQu7f-RZ

步骤

< >

( closure = None )

参数

  • closure (callable, optional) — 一个重新评估模型并返回损失的闭包。

执行一个优化步骤。

timm.optim.Lamb

< >

( params lr = 0.001 bias_correction = True betas = (0.9, 0.999) eps = 1e-06 weight_decay = 0.01 grad_averaging = True max_grad_norm = 1.0 trust_clip = False always_adapt = False )

参数

  • params (可迭代对象) — 要优化的参数的可迭代对象或定义参数组的字典。
  • lr (浮点数,可选) — 学习率。 (默认: 1e-3)
  • betas (Tuple[float, float], 可选) — 用于计算梯度及其范数的运行平均值的系数。 (默认: (0.9, 0.999))
  • eps (float, 可选) — 添加到分母中以改进数值稳定性的项。 (默认:1e-8)
  • weight_decay (float, 可选) — 权重衰减 (L2 惩罚) (默认:0)
  • grad_averaging (bool, 可选) — 是否在计算梯度的运行平均值时应用 (1-beta2)。 (默认:True)
  • max_grad_norm (浮点数,可选) — 用于剪枝全局梯度范数的值(默认:1.0)
  • trust_clip (布尔值) — 启用 LAMBC 信任比率剪枝(默认:False)
  • always_adapt (布尔值,可选) — 对 0.0 权重衰减参数应用自适应学习率(默认:False)

实现了来自 apex.optimizers.FusedLAMB 引用中的 FuseLAMB (NvLamb 变体) 的 PyTorch 版本优化器:https://github.com/NVIDIA/DeepLearningExamples/blob/master/PyTorch/LanguageModeling/Transformer-XL/pytorch/lamb.py

LAMB 在论文《Large Batch Optimization for Deep Learning: Training BERT in 76 minutes》中提出。

.. _Large Batch Optimization for Deep Learning - Training BERT in 76 minutes: https://arxiv.org/abs/1904.00962 .. _On the Convergence of Adam and Beyond: https://openreview.net/forum?id=ryQu7f-RZ

步骤

( closure = None )

参数

执行一个优化步骤。

( params lr = 1.0 momentum = 0 dampening = 0 weight_decay = 0 nesterov = False trust_coeff = 0.001 eps = 1e-08 trust_clip = False always_adapt = False )

参数

  • params (可迭代对象) — 要优化的参数的可迭代对象或定义参数组的字典。
  • lr (浮点数,可选) — 学习率(默认:1.0)。
  • momentum (float, 可选) — 惯性因子(默认:0)
  • weight_decay (float, 可选) — 权重衰减(L2惩罚)(默认:0)
  • dampening (float, 可选) — 惯性 dampening(默认:0)
  • nesterov (bool, 可选) — 启用 Nesterov 惯性(默认:False)
  • trust_coeff (浮点数) — 用于自适应学习率/trust_ratio的信任系数(默认:0.001)
  • eps (浮点数) — 除法分母的eps(默认:1e-8)
  • trust_clip (布尔值) — 启用LARC信任比率剪辑(默认:False)
  • always_adapt (布尔值) — 总是应用LARS学习率自适应,否则只在group_weight_decay不等于0时应用(默认:False)

LARS for PyTorch

论文:卷积神经网络的大批次训练 - https://arxiv.org/pdf/1708.03888.pdf

步骤

< >

( closure = None )

参数

  • closure (可调用的,可选) — 重新评估模型并返回损失的一个闭包。

执行一个优化步骤。

timm.optim.Lookahead

< >

( base_optimizer alpha = 0.5 k = 6 )

timm.optim.MADGRAD

< >

( params: Any lr: float = 0.01 momentum: float = 0.9 weight_decay: float = 0 eps: float = 1e-06 decoupled_decay: bool = False )

参数

  • params (可迭代对象) — 要优化的参数的迭代器或定义参数组的字典。
  • lr (float) — 学习率(默认:1e-2)。
  • momentum (浮点数) — 动量值,范围为 [0,1)(默认:0.9)。
  • weight_decay (浮点数) — 权重衰减,即 L2 惩罚(默认:0)。
  • eps (浮点数) — 在根操作外加到分母上的项,以改善数值稳定性。(默认:1e-6)。

MADGRAD_: 用于随机优化的动量化、自适应、双重平均梯度方法。

.. _MADGRAD: https://arxiv.org/abs/2101.11075

MADGRAD 是一种通用优化器,可以用作 SGD 或 Adam 替代,可能收敛更快,泛化能力更强。目前仅限 GPU 使用。通常,可以用于 SGD 或 Adam 的相同学习率计划。整体学习率与两种方法均不可比,应通过超参数扫描确定。

MADGRAD 比 其他方法需要的权重衰减更少,通常仅为零。用于 SGD 或 Adam 的 beta1 的动量值也适用于此处。

在稀疏问题上,应将 weight_decay 和 momentum 都设置为 0。

步骤

< >

( 闭包: 可选 = None )

参数

  • 闭包 (可调用函数,可选) — 重新评估模型并返回损失。

执行一个优化步骤。

timm.optim.Nadam

< >

( params lr = 0.002 betas = (0.9, 0.999) eps = 1e-08 weight_decay = 0 schedule_decay = 0.004 )

参数

  • params (可迭代对象) — 要优化的参数或定义参数组的字典
  • lr (浮点数,可选) — 学习率(默认:2e-3)
  • betas (浮点数元组,可选) — 用于计算梯度和其平方的运行平均值的系数
  • eps (float, 可选) — 加到分母以改进数值稳定性的项(默认:1e-8)
  • weight_decay (float, 可选) — 权重衰减(L2 惩罚)(默认:0)
  • schedule_decay (float, 可选) — 动量计划衰减(默认:4e-3)

实现了 Nadam 算法(基于 Nesterov 动量的 Adam 变体)。

该算法已在《Incorporating Nesterov Momentum into Adam》中提出。

http://cs229.stanford.edu/proj2015/054_report.pdf http://www.cs.toronto.edu/~fritz/absps/momentum.pdf

最初来自于: https://github.com/pytorch/pytorch/pull/1408 备注:存在潜在问题,但在某些问题下表现良好。

步骤

< >

( closure = None )

参数

  • closure (可调用对象,可选) — 重新评估模型并返回损失的一个闭包。

执行一个优化步骤。

class timm.optim.NvNovoGrad

< >

( params lr = 0.001 betas = (0.95, 0.98) eps = 1e-08 weight_decay = 0 grad_averaging = False amsgrad = False )

参数

  • params (可迭代对象) — 要优化的参数的可迭代对象或定义参数组的字典
  • lr (浮点数,可选) — 学习率(默认:1e-3)
  • betas (浮点数元组,可选) — 用于计算梯度及其平方的运行平均值系数(默认:(0.95, 0.98))
  • eps (浮点数,可选) — 加到分母上的项,以提高数值稳定性(默认:1e-8)
  • weight_decay (浮点数,可选) — 权重衰减(L2惩罚)(默认:0)grad_averaging — 梯度平均值
  • amsgrad (布尔值,可选) — 是否使用论文《On the Convergence of Adam and Beyond》中此算法的AMSGrad变体(默认:False)

实现了Novograd算法。

步骤

< >

( closure = None )

参数

  • closure (可调用对象,可选) — 一个闭包,重新评估模型
  • and 返回损失。 —

执行一个优化步骤。

timm.optim.RAdam

< >

( params lr = 0.001 betas = (0.9, 0.999) eps = 1e-08 weight_decay = 0 )

timm.optim.RMSpropTF

< >

( params lr = 0.01 alpha = 0.9 eps = 1e-10 weight_decay = 0 momentum = 0.0 centered = False decoupled_decay = False lr_in_momentum = True )

参数

  • params (可迭代对象) — 要优化的参数的可迭代对象或定义参数组的字典
  • lr (浮点数,可选) — 学习率(默认:1e-2)
  • momentum (浮点数,可选) — 动量因子(默认:0)
  • decoupled_decay (bool, 可选) — 如https://arxiv.org/abs/1711.05101所描述的解耦权重衰减
  • lr_in_momentum (bool, 可选) — 允许学习率缩放纳入动量缓冲区更新,如Tensorflow的默认设置

实现RMSprop算法(TensorFlow风格的epsilon)

注意:此代码是从PyTorch RMSprop直接复制而来的,并在开方之前应用了eps,并对其他一些参数进行了修改,以更接近Tensorflow的超参数匹配。

重要的更改包括

  1. 在平方根内应用Epsilon
  2. square_avg初始化为1
  3. 更新累积在动量缓冲区中的学习率缩放

由G. Hinton在他的课程中提出。

中心化版本首次出现在《利用循环神经网络生成序列》中。

步骤

< >

( closure = None )

参数

  • closure (可调用对象,可选) — 重新评估模型并返回损失的闭包。

执行一个优化步骤。

timm.optim.SGDP

< >

( params lr = <必需参数> momentum = 0 dampening = 0 weight_decay = 0 nesterov = False eps = 1e-08 delta = 0.1 wd_ratio = 0.1 )

< > 在GitHub上更新