[ 组合替代实现 ]torch.optim.lr_scheduler.CyclicLR

torch.optim.lr_scheduler.CyclicLR

torch.optim.lr_scheduler.CyclicLR(optimizer,
                                base_lr,
                                max_lr,
                                step_size_up=2000,
                                step_size_down=None,
                                mode='triangular',
                                gamma=1.0,
                                scale_fn=None,
                                scale_mode='cycle',
                                cycle_momentum=True,
                                base_momentum=0.8,
                                max_momentum=0.9,
                                last_epoch=- 1,
                                verbose=False)

paddle.optimizer.lr.CyclicLR

paddle.optimizer.lr.CyclicLR(base_learning_rate,
                            max_learning_rate,
                            step_size_up,
                            step_size_down=None,
                            mode='triangular',
                            exp_gamma=1.,
                            scale_fn=None,
                            scale_mode='cycle',
                            last_epoch=- 1,
                            verbose=False)

两者 API 功能一致, 参数用法不一致,PyTorch 是 Scheduler 实例持有 Optimizer 实例,Paddle 是 Optimizer 实例持有 Scheduler 实例。由于持有关系相反,因此 Paddle 使用 Optimizer.set_lr_scheduler 来设置这种持有关系。具体如下:

参数映射

PyTorch PaddlePaddle 备注
optimizer - PyTorch 的是 torch.optim.Optimizer 类,Paddle 无对应参数。
base_lr base_learning_rate 表示初始学习率,也是学习率变化的下边界。仅参数名不一致。
max_lr max_learning_rate 表示最大学习率。仅参数名不一致。
step_size_up step_size_up 表示学习率从初始学习率增长到最大学习率所需步数。PyTorch 默认值为 2000,Paddle 无默认值,Paddle 需保持与 PyTorch 一致。
step_size_down step_size_down 表示学习率从最大学习率下降到初始学习率所需步数。若未指定,则其值默认等于 step_size_up。参数完全一致。
mode mode 可以是 triangular、triangular2 或者 exp_range。参数完全一致。
gamma exp_gamma 表示缩放函数中的常量。仅参数名不一致。
scale_fn scale_fn 一个有且仅有单个参数的函数,且对于任意的输入 x,都必须满足 0 ≤ scale_fn(x) ≤ 1;如果该参数被指定,则会忽略 mode 参数。参数完全一致。
scale_mode scale_mode cycle 或者 iterations,表示缩放函数使用 cycle 数或 iterations 数作为输入。参数完全一致。
cycle_momentum - 如果"True",动量反向循环 'base_momentum' 和 'max_momentum' 之间的学习率。Paddle 无此参数,暂无转写方式。
base_momentum - 每个参数组的循环中的动量下边界。Paddle 无此参数,暂无转写方式。
max_momentum - 每个参数组的循环中的动量上边界。Paddle 无此参数,暂无转写方式。
last_epoch last_epoch 上一轮的轮数,重启训练时设置为上一轮的 epoch 数。参数完全一致。
verbose verbose 如果是 True,则在每一轮更新时在标准输出 stdout 输出一条信息。参数完全一致。

转写示例

# PyTorch 写法
linear = torch.nn.Linear(10, 10)
sgd = torch.optimizer.SGD(lr=0.5, parameters=linear.parameters())
scheduler = torch.optim.lr_scheduler.CyclicLR(optimizer=sgd, base_lr=0.01, max_lr=0.1)

# Paddle 写法
linear = paddle.nn.linear(10, 10)
sgd = paddle.optimizer.SGD(learning_rate=0.5, parameters=linear.parameters())
scheduler = paddle.optimizer.lr.CyclicLR(base_learning_rate=0.01, max_learning_rate=0.1, step_size_up=2000)
sgd.set_lr_scheduler(scheduler)