当我使用 tf.keras.optimizers.schedules.ExponentialDecay 时,如何在 TensorFlow 2.0 中获得 SGD 优化器的当前学习率?

sal*_*izl 9 python tensorflow2.0

我想在tensorflow2.0的SGD优化器中降低学习率,我使用了这行代码:

lr_schedule = tf.keras.optimizers.schedules.ExponentialDecay(
            initial_learning_rate=self.parameter['learning_rate'],
            decay_steps=(1000), 
            decay_rate=self.parameter['lr_decay']
        )
opt = tf.keras.optimizers.SGD(learning_rate=lr_schedule, momentum=0.9)
Run Code Online (Sandbox Code Playgroud)

但是我不知道我的学习率是否下降了,我如何才能获得我当前的学习率?

Lis*_*anu 5

_decayed_lr方法根据迭代次数衰减 learning_rate 为lr_decay并返回该特定迭代的实际学习率。它还将返回值转换为您指定的类型。因此,以下代码可以为您完成这项工作:

opt._decayed_lr(tf.float32)
Run Code Online (Sandbox Code Playgroud)

  • 欢迎来到堆栈溢出!虽然这在理论上可以回答这个问题,但最好包含一些代码描述。比如你为什么认为这应该解决问题或者它能做什么。 (7认同)

Dan*_*Lee 5

@Lisanu 的回答也对我有用。
这就是为什么这个答案是有效的:

这个tensorflow的github网页显示了tf.keras.optimizers.
如果向下滚动,会出现一个名为 的函数,它_decayed_lr允许用户以 dtype=var_dtype 的张量形式获取衰减的学习率。

因此,通过使用optimizer._decayed_lr(tf.float32),我们可以获得当前的衰减学习率。

如果您想在 Tensorflow 训练期间打印当前衰减的学习率,您可以定义一个自定义回调类并利用optimizer._decayed_lr(tf.float32). 示例如下:

class CustomCallback(tf.keras.callbacks.Callback):
    def on_epoch_begin(self, epoch, logs=None):
        current_decayed_lr = self.model.optimizer._decayed_lr(tf.float32).numpy()
        print("current decayed lr: {:0.7f}".format(current_decayed_lr))
Run Code Online (Sandbox Code Playgroud)