Python 3.x 带有tf.GradientTape的TensorFlow 2.0学习速率调度器

Python 3.x 带有tf.GradientTape的TensorFlow 2.0学习速率调度器,python-3.x,tensorflow2.0,Python 3.x,Tensorflow2.0,我正在使用TensorFlow 2.0和Python3.8,我想使用一个学习率调度器,我有一个函数。我必须训练一个160个时期的神经网络,其中80和120个时期的学习率将降低10倍,其中初始学习率=0.01 def scheduler(epoch, current_learning_rate): if epoch == 79 or epoch == 119: return current_learning_rate / 10 else

我正在使用TensorFlow 2.0和Python3.8,我想使用一个学习率调度器,我有一个函数。我必须训练一个160个时期的神经网络,其中80和120个时期的学习率将降低10倍,其中初始学习率=0.01

def scheduler(epoch, current_learning_rate): 
        if epoch == 79 or epoch == 119: 
            return current_learning_rate / 10 
        else: 
            return min(current_learning_rate, 0.001) 
如何将此学习速率计划程序函数与“tf.GradientTape()”一起使用?我知道如何使用“model.fit()”作为回调:

callback = tf.keras.callbacks.LearningRateScheduler(scheduler)
在使用带有“tf.GradientTape()”的自定义训练循环时,如何使用此选项


谢谢

可以使用tensorflow keras优化器的lr属性设置不同时期的学习率。优化器的lr属性仍然存在,因为tensorflow 2对keras具有向后兼容性(有关更多详细信息,请参阅源代码)。 下面是学习率如何在不同时期变化的一个小片段。self.\u train\u step与定义的train\u step函数类似

另一种选择是使用tf.keras.optimizers.schedules

learning_rate_fn = keras.optimizers.schedules.PiecewiseConstantDecay(
    [80*num_steps, 120*num_steps, 160*num_steps, 180*num_steps],
    [1e-3, 1e-4, 1e-5, 1e-6, 5e-6]
    )

optimizer = tf.keras.optimizers.Adam(learning_rate=learning_rate_fn)

请注意,这里不能直接提供历代,而是必须给出步骤数,其中每个步骤都是len(训练数据)/批量大小。

自我训练指的是什么?自我可以指具有自定义训练和验证步骤的自定义模型类,如下所示:
learning_rate_fn = keras.optimizers.schedules.PiecewiseConstantDecay(
    [80*num_steps, 120*num_steps, 160*num_steps, 180*num_steps],
    [1e-3, 1e-4, 1e-5, 1e-6, 5e-6]
    )

optimizer = tf.keras.optimizers.Adam(learning_rate=learning_rate_fn)