【问题标题】:How to decrease the learning rate every 10 epochs by a factor of 0.9?如何将每 10 个 epoch 的学习率降低 0.9 倍?
【发布时间】:2021-10-16 13:13:38
【问题描述】:

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

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 个 epoch 后降低我的学习率。我该怎么做?

【问题讨论】:

    标签: python tensorflow keras deep-learning


    【解决方案1】:

    您可以使用自定义回调来实现您想要的。代码如下。在回调模型中是您编译模型的名称。 freq 是一个整数,用于确定调整学习率的频率。因子是一个浮点数。新的学习率=旧的学习率X因子。详细是一个整数。如果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)]
    

    确保在 model.fit 中包含 callbacks=callbacks

    【讨论】:

    • 非常感谢您的回答。像opt = tf.keras.optimizers.Adam(learning_rate=0.001) #opt = tf.keras.optimizers.RMSprop(learning_rate=0.001) model.compile(loss="categorical_crossentropy", optimizer=opt, metrics=["accuracy"])这样的优化器怎么样?
    • 不明白你的问题。这应该适用于任何优化器
    • 我使用的方式如下:callbacks = [ADJUSTLR(model, freq, factor, verbose)] opt = tf.keras.optimizers.RMSprop(learning_rate=0.001) model.compile(loss="categorical_crossentropy", optimizer=opt, metrics=["accuracy"]) model.fit(train_x, train_y, batch_size=batch_size, epochs=total_epoch, callbacks=callbacks, validation_data=(val_x, val_y), verbose=1)
    • 请确认,可以吗
    • 不知怎的!非常感谢。
    猜你喜欢
    • 1970-01-01
    • 2021-09-30
    • 1970-01-01
    • 2021-01-08
    • 1970-01-01
    • 2021-03-19
    • 2020-08-22
    • 2020-05-19
    • 2019-02-22
    相关资源
    最近更新 更多