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

时间:2018-11-26 10:20:53

标签: python machine-learning keras neural-network

下面是我的代码:

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)

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

3 个答案:

答案 0 :(得分:5)

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

假设您的学习率是时代指数的数倍(可能不是最好的主意,但很容易理解)

def adapt_learning_rate(epoch):
    return 0.001 * epoch

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

my_lr_scheduler = keras.callbacks.LearningRateScheduler(adapt_learning_rate)

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

model.fit(X, y, ..., callbacks=[my_lr_scheduler])

答案 1 :(得分:1)

您需要在此处替换SGD

model.compile(SGD(lr=.1), loss='binary_crossentropy', metrics=['accuracy'])

使用提供的优化程序之一,例如亚当:

model.compile(Adam(lr=.1), loss='binary_crossentropy', metrics=['accuracy'])

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

答案 2 :(得分:1)

您可以使用解决方法。

对于范围(0,MaxEpoch)中的each_iteration:

  1. 指定您自己的学习率函数,该函数针对每个时期输出学习率lr。然后将lr传递给your_optimiser

  2. 运行model.compile(... optimizer = your_optimiser ...)

  3. 运行model.fit(... epochs = 1 ...)

  4. 一个纪元后,使用model.save_weights(...)

  5. 通过model.load_weights(...)加载权重以进行下一次迭代。详情请参见此处https://keras.io/getting-started/faq/#how-can-i-save-a-keras-model

事实上,#4和#5使您能够进行迁移学习