标签: learning-rate

Pytorch 根据 epoch 数改变学习率

当我设置学习率并发现训练几个时期后准确率无法提高时

optimizer = optim.Adam(model.parameters(), lr = 1e-4)

n_epochs = 10
for i in range(n_epochs):

    // some training here
Run Code Online (Sandbox Code Playgroud)

如果我想使用阶跃衰减:每 5 个时期将学习率降低 10 倍,我该怎么做?

optimization pytorch learning-rate

12
推荐指数
1
解决办法
2万
查看次数

tf.Keras 学习率计划——传递给优化器还是回调?

我只是想为我的第一个 CNN 设置学习率计划,我发现有多种方法可以实现:

  1. 可以使用以下方法将时间表包含在回调中tf.keras.callbacks.LearningRateScheduler()
  2. 人们可以使用它将其传递给优化器tf.keras.optimizers.schedules.LearningRateSchedule()

现在我想知道是否有任何差异,如果有,它们是什么?如果没有什么区别,为什么还要存在这些替代方案呢?有历史原因吗(应该首选哪种方法)?

有人可以详细说明吗?

python conv-neural-network keras tensorflow learning-rate

8
推荐指数
1
解决办法
2593
查看次数

正确设置张量流中学习率的指数衰减

我需要每 10 个时期应用学习率的指数衰减。初始学习率为0.000001,衰减因子为0.95

这是正确的设置方法吗?

lr_schedule = tf.keras.optimizers.schedules.ExponentialDecay(
        initial_learning_rate=0.000001, 
        decay_steps=(my_steps_per_epoch*10), 
        decay_rate=0.05)
opt = tf.keras.optimizers.SGD(learning_rate=lr_schedule, momentum=0.9)
Run Code Online (Sandbox Code Playgroud)

指数衰减的公式为current_lr = initial_lr * (1 - decay_factor)^t 除了在代码中它实现为:

decayed_learning_rate = learning_rate *
                      decay_rate ^ (global_step / decay_steps)
Run Code Online (Sandbox Code Playgroud)

据我所知,在我的例子中,decay_rate应该是1 - decay_factor并且decay_steps应该意味着在应用衰减之前执行了多少步my_steps_per_epoch*10。那是对的吗?

编辑:

如果我在第 10 个纪元后暂停并保存模型(使用回调),然后通过加载模型并使用model.fitinitial_epoch=10调用来恢复epochs=11,它会在第 11 个纪元开始并应用指数衰减吗?

python deep-learning tensorflow learning-rate

6
推荐指数
1
解决办法
6292
查看次数

PyTorch:学习率调度程序

如何将学习率调度程序与以下优化程序一起使用?

optimizer = torch.optim.Adam(optim_params,betas=(args.momentum, args.beta), weight_decay=args.weight_decay)
Run Code Online (Sandbox Code Playgroud)

我已经编写了以下调度程序:

scheduler = torch.optim.lr_scheduler.StepLR(optimizer, step_size=100, gamma=0.9)
Run Code Online (Sandbox Code Playgroud)

我不清楚是否应该执行调度程序或优化程序。我应该采取以下顺序执行以下操作?

optimizer.zero_grad()
scheduler.step()
optimizer.step()
Run Code Online (Sandbox Code Playgroud)

python machine-learning pytorch learning-rate

4
推荐指数
1
解决办法
63
查看次数

Pytorch 调度学习率

我正在尝试重新实现一篇论文,其中建议调整学习率如下:

在0.0001的变化值上,学习率降低了回归值的一个因子,耐心时期 10 。

我应该使用torch.optim.lr_scheduler.ReduceLROnPlateau()?

我不确定应该将什么值传递给每个参数。

  1. 语句中的变化值是否表示参数阈值

  2. 的因素在声明中表示的参数的因素

optimization pytorch learning-rate

3
推荐指数
1
解决办法
4132
查看次数

如何使用OneCycleLR?

我想在 CIFAR-10 上进行训练,假设训练 200 个时期。\n这是我的优化器:\n optimizer = optim.Adam([x for x in model.parameters() if x.requires_grad], lr=0.001)\n我想使用 OneCycleLR 作为调度程序。现在,根据文档,这些是 OneCycleLR 的参数:

\n
torch.optim.lr_scheduler.OneCycleLR(optimizer, max_lr, total_steps=None, epochs=None, steps_per_epoch=None, pct_start=0.3, anneal_strategy='cos', cycle_momentum=True, base_momentum=0.85, max_momentum=0.95, div_factor=25.0, final_div_factor=10000.0, three_phase=False, last_epoch=- 1, verbose=False)\n
Run Code Online (Sandbox Code Playgroud)\n

我发现最常用的是max_lr,epochssteps_per_epoch。文档是这样说的:

\n
    \n
  • max_lr(浮点或列表)\xe2\x80\x93 每个参数组循环中的学习率上限。
  • \n
  • epochs (int) \xe2\x80\x93 要训练的纪元数。如果未提供total_steps 的值,则将其与steps_per_epoch 一起使用,以便推断循环中的总步数。默认值:无
  • \n
  • steps_per_epoch (int) \xe2\x80\x93 每个时期训练的步数。如果未提供total_steps 的值,则将其与epoch 一起使用,以便推断循环中的总步数。默认值:无
  • \n
\n

关于steps_per_epoch,我在许多github repo中看到它被使用steps_per_epoch=len(data_loader),所以如果我的批量大小为128,那么这个参数它等于128。\n但是我不明白其他2个参数是什么。如果我想训练 200 个 epoch,那么epochs=200?或者这是一个仅运行调度程序epoch然后重新启动的参数?例如,如果我在调度器内部写epochs=10,但我总共训练了200,那么就像调度器的20个完整步骤?\n然后max_lr …

optimization neural-network deep-learning pytorch learning-rate

3
推荐指数
1
解决办法
7999
查看次数

pytorch中的param_groups到底是什么意思?

我想在训练期间更新 pytorch 中与每个权重矩阵和每个偏差相对应的学习率。这里这里的答案以及我在网上找到的许多其他答案都谈到使用模型来做到这一点,param_groups据我所知,该模型应用分组学习率,而不是特定于层权重/偏差。我还想在训练期间更新学习率,而不是预先设置它们torch.optim

任何帮助表示赞赏。

pytorch learning-rate

3
推荐指数
1
解决办法
6072
查看次数