常用的callbacks函数有EarlyStopping
(提前停止训练) ModelCheckpoint
(保存最优模型)CSVLogger
(保存训练过程的精度、loss等)ReduceLROnPlateau
(当模型性能无法进一步提升时降低学习率),以下为一个简单的例子
from sklearn.datasets import make_blobs
from keras.layers import Dense, Input
from keras import Model
from keras import callbacks
# 定义一个简单的MLP
def MLP(hidden=50):
inputs = Input(shape=(2,))
x = Dense(units=hidden, activation='relu')(inputs)
out = Dense(units=3, activation='softmax')(x)
model = Model(inputs, out)
model.compile(loss='sparse_categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
return model
定义回调函数列表
callbacks_list = [
# 监视变量monitor在patience个epoch间差值都小于阈值min_delta时停止训练,
# mode即该变量的类型,loss是min 越小越好,max越大越好 例如 精度
callbacks.EarlyStopping(
monitor='val_loss',
min_delta=0.000001,
patience=2,
verbose=1,
mode='min'
),
# 保存训练过程中的最优模型,filepath保存路径
# monitor监视变量,保存训练过程中该值最优的模型,
# save_weights_only False相当于model.save()保存整个模型结构和权重 True 只保存权重
# save_best_only 是否覆盖当前最好的模型
callbacks.ModelCheckpoint(
filepath='log/mymodel.h5',
monitor='val_loss',
save_weights_only=False,
mode='min',
save_best_only=True
),
# 将训练过程的精度loss等写入文件中,append 当文件存在时 是否在尾部添加或是覆盖
callbacks.CSVLogger(
filename='log/train.csv',
append=True
),
# 降低学习率,当监视变量在patience个epoch中都没有改善(根据min_delta阈值判断)时就降低学习率,
# lr = lr*factor,此处即减10倍,min_lr 学习率下限
callbacks.ReduceLROnPlateau(
monitor='val_loss',
factor=0.1, # lr*factor
patience=10
mode='min',
min_delta=1e-4,
min_lr = 0
)
]
运行代码,在log下保存了最优模型和训练过程loss acc等变化