0

我正在使用 Python 3.7 和 TensorFlow 2.0,我必须使用以下学习率调度程序为 160 个 epoch 训练一个神经网络:

在 80 和 120 个 epoch 时将学习率降低 10 倍,其中初始学习率 = 0.01。

我如何编写一个函数来合并这个学习率调度程序:

def scheduler(epoch):
    if epoch < 80:
        return 0.01
    elif epoch >= 80 and epoch < 120:
        return 0.01 / 10
    elif epoch >= 120:
        return 0.01 / 100

callback = tf.keras.callbacks.LearningRateScheduler(scheduler)

model.fit(
    x = data, y = labels,
    epochs=100, callbacks=[callback],
    validation_data=(val_data, val_labels))

这是一个正确的实现吗?

谢谢!

4

1 回答 1

1

期望一个函数,tf.keras.callbacks.LearningRateScheduler它将一个时期索引作为输入(整数,从 0 开始索引)并返回一个新的学习率作为输出(浮点数):

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)

这将在 80 和 120 时期将学习率降低 10 倍,并使其在所有其他时期保持不变。

于 2020-03-14T15:59:28.540 回答