虽然Adam等优化器能自适应调整学习率,但是到了模型训练后期仍需要手动调整学习率来提高模型性能,降低vall_loss值。
以keras为例,keras提供了两种学习率调整策略,可以通过回调函数实现。
1. LearningRateScheduler
keras.callbacks.LearningRateScheduler(schedule)
该回调函数是学习率调度器。
参数
- schedule: 该函数以eopch为监测量(从0算起的整数),返回一个新的学习率(浮点数)
代码
import keras.backend as K
from keras.callbacks import LearningRateScheduler
def scheduler(epoch):
# 每隔20个epoch,学习率减小为原来的1/2
if epoch % 20 == 0 and epoch != 0:
lr = K.get_value(model.optimizer.lr)
K.set_value(model.optimizer.lr, lr * 0.5)
print("lr changed to {}".format(lr * 0.5))
return K.get_value(model.optimizer.lr)
reduce_lr = LearningRateScheduler(scheduler)
model.fit(train_x, train_y, batch_size=32, epochs=300, callbacks=[reduce_lr])
def step_decay