【问题标题】:How to use Adam optim considering of its adaptive learning rate?考虑到自适应学习率,如何使用 Adam optim?
【发布时间】:2019-09-30 13:16:48
【问题描述】:

在Adam优化算法中,学习速度是根据迭代次数来调整的。我不太了解 Adam 的设计,尤其是在使用批量训练时。使用批量训练时,如果有19200张图片,每次训练64张图片,相当于300次迭代。如果我们的 epoch 有 200 次,那么总共有 60,000 次迭代。我不知道这样的多次迭代是否会将学习速度降低到非常小的尺寸。那么当我们训练的时候,是在每个 epoch 之后初始化 optim,还是在整个过程中什么都不做呢?

使用火炬。如果我使用批处理训练,我会尝试在每个 epoch 之后初始化优化,当数据数量很少时我什么都不做。

例如,我不知道这两段代码是否正确:

optimizer = optim.Adam(model.parameters(), lr=0.1)
for epoch in range(100):
    ###Some code
    optim.step()

另一段代码:

for epoch in range(100):
    optimizer = optim.Adam(model.parameters(), lr=0.1)
    ###Some code
    optim.step()

【问题讨论】:

  • 第一个块是正确的,但在你执行优化步骤之前,你可以通过 'optim.zero_grad()' 将梯度归零

标签: pytorch


【解决方案1】:

你可以在这里阅读官方论文https://arxiv.org/pdf/1412.6980.pdf

您的更新看起来有点像这样(为简洁起见,我省略了预热阶段):

new_theta = old_theta-learning_rate*momentum/(velocity+eps)

这里的直觉是,如果momentum>velocity,那么优化器处于平稳状态,所以learning_rate 增加,因为momentum/velocity > 1。另一方面,如果momentumvelocity,则优化器处于陡坡或嘈杂区域,因此learning_rate减小。

正如您在问题中提到的那样,learning_rate 不一定会在整个培训过程中减少。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-09
    • 2016-02-28
    • 2016-11-19
    • 1970-01-01
    • 2022-01-10
    • 1970-01-01
    相关资源
    最近更新 更多