【问题标题】:Can you extract the current learning rate from tf.keras.Adam?你能从 tf.keras.Adam 中提取当前的学习率吗?
【发布时间】:2019-04-10 22:56:19
【问题描述】:

我想在训练期间使用 Tensorflow 的 keras 实现和 Adam 来试验衰减。 model.optimizer.lr 似乎只是基础学习率,不会随衰减而变化。对于监控和可视化,看到实际使用价值会让人放心。是否可以直接获得(无需并行计算并假设您的数学运算正确)?

【问题讨论】:

  • 基本学习率始终保持不变。你需要写一个回调函数,on_epoch_end()根据你的优化器公式计算当前的学习率。

标签: tensorflow keras tf.keras


【解决方案1】:

你可以试试这个代码。这是改编自 Keras 源代码。我自己没有测试过。

class AdamLearningRateTracker(Callback):
    def on_epoch_end(self, logs={}):
        beta_1 = self.beta_1, 
        beta_2 = self.beta_2
        optimizer = self.model.optimizer
        if optimizer.decay > 0:
            lr = K.eval(optimizer.lr * (1. / (1. + optimizer.decay * optimizer.iterations)))
        t = K.cast(optimizer.iterations, K.floatx()) + 1
        lr_t = lr * (K.sqrt(1. - K.pow(beta_2, t)) /(1. - K.pow(beta_1, t)))
        print('lr: {:.6f}\n'.format(lr_t))

【讨论】:

  • 这就是我所说的“并行计算并假设你的数学运算正确”的意思。您基本上是在 Adam 中使用学习率更新代码的副本,以便能够从本质上运行相同的代码两次。也许这是做到这一点的唯一方法,但它并不能真正相信实际学习率的表现是否符合预期。
  • 是的,你是对的。这是重复相同的代码。不过,我还没有遇到任何不同的做法。让我们希望有更好的方法。 :)
  • 有谁知道为什么提取这个如此困难?为什么没有通用函数呢?
猜你喜欢
  • 1970-01-01
  • 2022-12-04
  • 1970-01-01
  • 2017-08-15
  • 1970-01-01
  • 1970-01-01
  • 2021-05-21
  • 2020-10-22
相关资源
最近更新 更多