tf.Keras 学习率计划——传递给优化器或回调?
tf.Keras learning rate schedules—pass to optimizer or callbacks?
我只是想为我的第一个 CNN 设置一个学习率时间表,我发现有多种方法可以这样做:
- One can include the schedule in callbacks 使用
tf.keras.callbacks.LearningRateScheduler()
- One can pass it to an optimizer 使用
tf.keras.optimizers.schedules.LearningRateSchedule()
现在我想知道是否有任何差异,如果有,它们是什么?如果没有区别,那么为什么存在这些替代方案呢?是否有历史原因(应该首选哪种方法)?
有人可以详细说明吗?
tf.keras.callbacks.LearningRateScheduler()
和 tf.keras.optimizers.schedules.LearningRateSchedule()
都提供相同的功能,即在训练模型时实现学习率衰减。
一个明显的区别可能是 tf.keras.callbacks.LearningRateScheduler
在其构造函数中接受一个函数,如文档中所述,
tf.keras.callbacks.LearningRateScheduler(schedule, verbose=0)
schedule: a function that takes an epoch index (integer, indexed from 0) and current learning rate (float) as inputs and returns a new learning rate as output (float).
schedule
函数将 return 给定当前纪元索引的学习率。要实现各种类型的 LR 衰减,如指数衰减、多项式衰减等,您需要自己在这个 schedule
方法中编写它们。
另一方面,tf.keras.optimizers.schedules.LearningRateSchedule()
是一个高级class。 tf.keras.optimizers.schedules.*
中包含的其他类型的衰变,如 PolynomialDecay
或 InverseTimeDecay
继承此 class。因此,该模块提供了 ML 中常用的内置 LR 衰减方法。此外,要实现自定义 LR 衰减,您的 class 需要继承 tf.keras.optimizers.schedules.LearningRateSchedule()
并覆盖 __call__
和 __init__
等方法,如文档中所述,
To implement your own schedule object, you should implement the
call method, which takes a step argument (scalar integer tensor, the current training step count).
结论:
如果您想使用一些内置的 LR 衰减,请使用 tf.keras.optimizers.schedules.*
模块,即该模块中提供的 LR 衰减。
如果您需要一个简单的自定义 LR 衰减,它只需要纪元索引作为参数,请使用 tf.keras.callbacks.LearningRateScheduler
.
如果您的自定义 LR Decay 需要比纪元索引更多的参数,请创建一个新的 class 并继承 tf.keras.optimizers.schedules.LearningRateSchedule
.
我只是想为我的第一个 CNN 设置一个学习率时间表,我发现有多种方法可以这样做:
- One can include the schedule in callbacks 使用
tf.keras.callbacks.LearningRateScheduler()
- One can pass it to an optimizer 使用
tf.keras.optimizers.schedules.LearningRateSchedule()
现在我想知道是否有任何差异,如果有,它们是什么?如果没有区别,那么为什么存在这些替代方案呢?是否有历史原因(应该首选哪种方法)?
有人可以详细说明吗?
tf.keras.callbacks.LearningRateScheduler()
和 tf.keras.optimizers.schedules.LearningRateSchedule()
都提供相同的功能,即在训练模型时实现学习率衰减。
一个明显的区别可能是 tf.keras.callbacks.LearningRateScheduler
在其构造函数中接受一个函数,如文档中所述,
tf.keras.callbacks.LearningRateScheduler(schedule, verbose=0)
schedule: a function that takes an epoch index (integer, indexed from 0) and current learning rate (float) as inputs and returns a new learning rate as output (float).
schedule
函数将 return 给定当前纪元索引的学习率。要实现各种类型的 LR 衰减,如指数衰减、多项式衰减等,您需要自己在这个 schedule
方法中编写它们。
另一方面,tf.keras.optimizers.schedules.LearningRateSchedule()
是一个高级class。 tf.keras.optimizers.schedules.*
中包含的其他类型的衰变,如 PolynomialDecay
或 InverseTimeDecay
继承此 class。因此,该模块提供了 ML 中常用的内置 LR 衰减方法。此外,要实现自定义 LR 衰减,您的 class 需要继承 tf.keras.optimizers.schedules.LearningRateSchedule()
并覆盖 __call__
和 __init__
等方法,如文档中所述,
To implement your own schedule object, you should implement the call method, which takes a step argument (scalar integer tensor, the current training step count).
结论:
如果您想使用一些内置的 LR 衰减,请使用
tf.keras.optimizers.schedules.*
模块,即该模块中提供的 LR 衰减。如果您需要一个简单的自定义 LR 衰减,它只需要纪元索引作为参数,请使用
tf.keras.callbacks.LearningRateScheduler
.如果您的自定义 LR Decay 需要比纪元索引更多的参数,请创建一个新的 class 并继承
tf.keras.optimizers.schedules.LearningRateSchedule
.