当我设置学习率并发现训练几个时期后准确率无法提高时
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 倍,我该怎么做?
我只是想为我的第一个 CNN 设置学习率计划,我发现有多种方法可以实现:
tf.keras.callbacks.LearningRateScheduler()tf.keras.optimizers.schedules.LearningRateSchedule()现在我想知道是否有任何差异,如果有,它们是什么?如果没有什么区别,为什么还要存在这些替代方案呢?有历史原因吗(应该首选哪种方法)?
有人可以详细说明吗?
我需要每 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.fit和initial_epoch=10调用来恢复epochs=11,它会在第 11 个纪元开始并应用指数衰减吗?
如何将学习率调度程序与以下优化程序一起使用?
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) 我正在尝试重新实现一篇论文,其中建议调整学习率如下:
在0.0001的变化值上,学习率降低了回归值的一个因子,耐心时期 10 。
我应该使用torch.optim.lr_scheduler.ReduceLROnPlateau()?
我不确定应该将什么值传递给每个参数。
语句中的变化值是否表示参数阈值?
是的因素在声明中表示的参数的因素?
我想在 CIFAR-10 上进行训练,假设训练 200 个时期。\n这是我的优化器:\n optimizer = optim.Adam([x for x in model.parameters() if x.requires_grad], lr=0.001)\n我想使用 OneCycleLR 作为调度程序。现在,根据文档,这些是 OneCycleLR 的参数:
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)\nRun Code Online (Sandbox Code Playgroud)\n我发现最常用的是max_lr,epochs和steps_per_epoch。文档是这样说的:
关于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