训练模型时,很多事情一开始无法预测。尤其是你不知道需要多少轮次才能得到最佳验证损失。通常简单的办法是:训练足够多的轮次,这时模型已经开始过拟合了,根据第一次运行来确定训练所需要的正确轮次,然后使用这个最佳轮数从头开始启动一个新的训练。当然,这种方法很浪费。更好的办法是使用回调函数。
ModelCheckpoing和EarlyStopping回调函数
如果监控的目标在设定轮数内不再改善,可以用EarlyStopping回调函数来中断训练。这个回调函数通常与ModelCheckpoint结合使用,后者可以在训练过程中持续的不断保存模型(你也可以选择只保存目前的最佳模型,即一轮结束后具有最佳性能的模型)
import keras
# 通过fit的callbacks参数将回调函数传入模型中,这个参数接收一个回调函数列表,你可以传入任意个回调函数
callback_lists = [
keras.callbacks.EarlyStopping(monitor = 'acc', # 监控模型的验证精度
patience = 1,), # 如果精度在多于一轮的时间(即两轮)内不再改善,就中断训练
# ModelCheckpoint用于在每轮过后保存当前权重
keras.callbacks.ModelCheckpoint(filepath = 'my_model.h5', # 目标文件的保存路径
# 这两个参数的意思是,如果val_loss没有改善,那么不需要覆盖模型文件,
# 这就可以始终保存在训练过程中见到的最佳模型
monitor = 'val_loss', save_best_only