如何在 Keras 中设置自适应学习率

Aly*_*ono 5 python machine-learning neural-network keras

下面是我的代码:

model = Sequential([
    Dense(32, input_shape=(32,), activation = 'relu'),
    Dense(100, activation='relu'),
    Dense(65, input_shape=(65,), activation='softmax')
])

model.summary()
model.compile(SGD(lr=.1), loss='binary_crossentropy', metrics=['accuracy'])
model.fit(train_samples, train_labels, batch_size=1000, epochs=1000,shuffle = True, verbose=2)
Run Code Online (Sandbox Code Playgroud)

我将如何设置模型的自适应学习率?

Mat*_*ava 7

您不需要像其他答案建议的那样重新编译模型。Keras随附callbacks可用于此任务。更准确地说,您可以使用LearningRateScheduler回调并向其传递一些函数,该函数将根据当前纪元索引调整学习率。

假设你希望你的学习率是纪元指数的数倍(可能不是最好的主意但很容易理解)

def adapt_learning_rate(epoch):
    return 0.001 * epoch
Run Code Online (Sandbox Code Playgroud)

现在我们有了我们的函数,我们可以创建一个学习调度程序,负责计算每个 epoch 开始时的学习率。

my_lr_scheduler = keras.callbacks.LearningRateScheduler(adapt_learning_rate)
Run Code Online (Sandbox Code Playgroud)

最后要做的是将此回调传递给fit方法。

model.fit(X, y, ..., callbacks=[my_lr_scheduler])
Run Code Online (Sandbox Code Playgroud)


art*_*ona 1

您需要SGD在这里更换

model.compile(SGD(lr=.1), loss='binary_crossentropy', metrics=['accuracy'])
Run Code Online (Sandbox Code Playgroud)

使用提供的优化器之一,例如 Adam:

model.compile(Adam(lr=.1), loss='binary_crossentropy', metrics=['accuracy'])
Run Code Online (Sandbox Code Playgroud)

阅读此内容https://keras.io/optimizers/