Keras学习速率计划传递给优化器还是回调?

2024-04-18 22:49:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我只是想为我的第一个CNN制定一个学习率计划,我发现有多种方法可以做到这一点:

  1. One can include the schedule in callbacks使用tf.keras.callbacks.LearningRateScheduler()
  2. One can pass it to an optimizer使用tf.keras.optimizers.schedules.LearningRateSchedule()

现在我想知道是否有任何不同,如果有,它们是什么?如果没有区别,那么为什么会存在这些替代方案呢?是否有历史原因(应首选哪种方法)

有人能详细说明一下吗


Tags: the方法inincludetfitpassone
1条回答
网友
1楼 · 发布于 2024-04-18 22:49:59

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).

函数将返回给定当前历元索引的学习速率。要实现各种类型的LR衰减,如指数衰减、多项式衰减等,您需要自己用这个schedule方法对它们进行编码

另一方面,tf.keras.optimizers.schedules.LearningRateSchedule()是一个高级类。tf.keras.optimizers.schedules.*中包含的其他类型的衰变,如PolynomialDecayInverseTimeDecay继承此类。因此,该模块提供了ML中常用的内置LR衰减方法。此外,要实现自定义LR衰减,您的类需要继承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衰减,它只需要epoch索引作为参数,请使用tf.keras.callbacks.LearningRateScheduler

  • 如果自定义LR Decay需要的参数不仅仅是历元索引,那么创建一个新类并继承tf.keras.optimizers.schedules.LearningRateSchedule

相关问题 更多 >