我们在一个深度模型的训练中经常会用到回调函数来对训练过程进行监测,使得训练过程更加智能化。
例如,我们经常使用的早停机制:
from tensorflow.keras.callbacks import EarlyStopping
early_stop = EarlyStopping(monitor='val_loss',
mode='min',
patience=10,
restore_best_weights=True,
verbose=1)
通过监测验证误差的变化趋势,我们可以在验证误差不再增长的时候提前结束训练。
另一个与 EarlyStopping 常常配合使用的是 ReduceLROnPlateau,当指定的训练误差或者验证误差在指定的轮次以内不再增长的时候,我们将学习率根据设置的衰减系数 factor 自动降低:
from keras.callbacks import ReduceLROnPlateau
learning_rate_reduction = ReduceLROnPlateau(monitor='val_acc',
patience=3,
verbose=1,
factor=0.5,
min_lr=0.00001)
keras 的回调 API 包含许多不同功能用途的回调函数,通常这些回调就可以满足我们的需求了。但如果我们想要更加精细的控制训练过程,可能需要写一个自己的回调。
我们接下来就实现一个,可以在训练过程中自由控制训练轮次和学习率的回调。这个回调的功能主要是:
- 在指定轮次之后询问使用者,是否继续训练,如果继续训练,键入继续训练的轮次,并选择保持或者改变当前学习率
- 如果验证误差增加,则自动调整学习率,且模型加载当前最优的权重
- 训练结束后,直接让模型加载最优权重
我们需要定义一个类,这个类继承 keras.callbacks.Callback,然后做一些初始化:
class My_ASK(keras.callbacks.Callback):
def __init__(self, model, epochs, ask_epoch, dwell=True, factor=.4):
super(My_ASK, self).__init__(

本文介绍了如何在Keras中实现一个自定义回调函数,用于在深度学习模型训练过程中控制训练轮次和学习率。回调功能包括在指定轮次后询问用户是否继续训练,验证误差增加时自动调整学习率,并在训练结束时加载最优权重。
最低0.47元/天 解锁文章

1706

被折叠的 条评论
为什么被折叠?



