【问题标题】:Setting adaptable learning rate for Adam without using callbacks在不使用回调的情况下为 Adam 设置自适应学习率
【发布时间】:2019-09-19 16:57:31
【问题描述】:

我正在探索 Tensorflow 文档 - NMT with Attention 的翻译模型。在 TF 2.0 中,优化器定义为

optimizer = tf.keras.optimizers.Adam()

在这种情况下如何设置学习率?它只是像下面这样初始化参数吗?如何设置自适应学习率?

tf.keras.optimizers.Adam(learning_rate=0.001)

NMT with Attention 模型中,他们不使用 Keras 来定义模型,我无法使用 Callbacks 或 'model.fit',如下所示:

model.fit(x_train, y_train, callbacks=[LearningRateReducerCb()], epochs=5)

【问题讨论】:

标签: python-3.x tensorflow tensorflow2.0 tf.keras


【解决方案1】:

我在 NMT 方面没有太多经验,但关于您提供的链接,最好使用LearningRateSchedule,它可以直接用作任何优化器中的学习率参数(例如,在您的示例中的 Adam)。流程如下:

  1. 定义您的自适应学习率计划(例如,AdaptiveLRSchedule 将继承自 LearningRateSchedule 并实现您喜欢的任何自适应学习率,类似于 in this example)。
  2. 实例化您的对象 - learning_rate = AdaptiveLRSchedule(your_parameters)
  3. 在 Adam 优化器中将其用作学习率 - optimizer = tf.keras.optimizers.Adam(learning_rate)
  4. 保持示例中的其余部分(optimizer.apply_gradients(zip(gradients, variables) 现在应该根据您的定义正确应用梯度并使用自适应学习率)。

请注意,您可以使用 TF 中已经存在的时间表之一,例如 ExponencialDecay,而不是在第一步中定义自己的类。

第二个选项是在train_step 中手动设置lr(在您的示例中为here)。反向传播后(请参阅上面(4)中来自您的示例的apply_gradients 方法),您可以直接设置您的lr。这可以通过optimizer.learning_rate.assign(new_lr) 实现,其中new_lr 将是来自您必须定义的自适应lr 函数的新学习率(类似于new_lr = adaptive_lr(optimizer.learning_rate),其中adaptive_lr 将实现它)。

【讨论】:

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