如何每10个epoch将学习率降低0.9倍?



我想将学习率设置为10^-3,每10个epoch衰减0.9倍。我在Tensorflow Keras中使用Adam优化器。我在官方文档中找到了这段代码:

initial_learning_rate = 0.1
lr_schedule = tf.keras.optimizers.schedules.ExponentialDecay(
initial_learning_rate,
decay_steps=100000,
decay_rate=0.96,
staircase=True
)

我不知道decay_steps=100000是什么。实际上我想在10次之后降低我的学习率。我该怎么做呢?

您可以使用自定义回调实现您想要的。代码如下所示。在回调模型中是编译模型的名称。频率是一个整数,它决定了学习率调整的频率。因子是浮点数。新学习率=旧学习率X因子。Verbose是一个整数。如果verbose=0,则不输出任何内容。如果verbose=1,则每次调整学习率时都会输出一个输出。

class ADJUSTLR(keras.callbacks.Callback):
def __init__ (self, model, freq, factor, verbose):
self.model=model
self.freq=freq
self.factor =factor
self.verbose=verbose
self.adj_epoch=freq
def on_epoch_end(self, epoch, logs=None):
if epoch + 1 == self.adj_epoch: # adjust the learning rate
lr=float(tf.keras.backend.get_value(self.model.optimizer.lr)) # get the current learning rate
new_lr=lr * self.factor
self.adj_epoch +=self.freq
if self.verbose == 1:
print('non epoch ',epoch + 1, ' lr was adjusted from ', lr, ' to ', new_lr)
tf.keras.backend.set_value(self.model.optimizer.lr, new_lr) # set the learning rate in the optimizer

对于您的情况,您希望freq=10和factor=.9

freq=10
factor=.9
verbose=1
callbacks=[ADJUSTLR(your_model, freq, factor, verbose)]

在模型中是确定的。Fit include回调=回调

最新更新