tf.keras.callbacks.BaseLogger(
stateful_metrics=None
)
积累指标在epoch内的平均值,此回调会自动应用于每个 Keras 模型。
不应该在一个epoch内平均的指标的字符串名称的可迭代对象或列表。此列表中的指标将按原样记录在 on_epoch_end 中。 其他所有指标将在 on_epoch_end 中取平均值。
tf.keras.callbacks.CSVLogger(
filename, separator=',', append=False
)
将epoch结果流式传输到 CSV 文件。记录了训练中所有的epoch
参数:
filename:csv文件的文件名,例如:'log.csv'。
separator:用于分隔csv文件中的元素的字符串。
append:布尔值,True:如果文件存在则追加。False:覆盖现有文件。
epoch,accuracy,loss
0,0.9141166806221008,0.2971611022949219
1,0.9576500058174133,0.14374151825904846
2,0.9672666788101196,0.10960810631513596
tf.keras.callbacks.EarlyStopping(
monitor='val_loss', min_delta=0, patience=0, verbose=0,
mode='auto', baseline=None, restore_best_weights=False
)
当被监测的数量不再提升,则停止训练
monitor: 被监测的指标,可以是loss....。
min_delta: 被监测的指标的最小变化的阈值, 小于该值的绝对变化被认为没有提升。
patience: 没有提升的训练轮数,大于该值则训练停止。第一次出现未提升时记录该监测的值,此后的epoch数据都和该次数据比较,仍未提升,仅增加等待的轮数,有提升则更新监测的值,并重置等待的轮数。
verbose: log日志的详细程度。
mode: 可选auto, min, max。 min:被监测的指标停止下降时,训练停止;max:被监测的指标停止上升时,训练停止;auto:根据被监测数据判断是max还是min。
baseline: 要监控的指标的基准值。 训练在容忍的patience轮数内没有达到该值,则训练停止。如果模型没有显示基准的改善,训练将停止。
restore_best_weights: 是否从监测指标的最佳值的epoch恢复模型权重。 如果为 False,则使用在训练的最后一步获得的模型权重。如果没有 epoch 在基线上有所改善,则训练将从patience内的 epochs 集合中选取最佳 epoch 恢复权重。
tf.keras.callbacks.History()
将事件记录到 History 对象中。此回调会自动应用于每个 Keras 模型。模型的 fit 方法返回 History 对象。
tf.keras.callbacks.LambdaCallback(
on_epoch_begin=None, on_epoch_end=None, on_batch_begin=None, on_batch_end=None,
on_train_begin=None, on_train_end=None, **kwargs
)
用于即时创建简单的自定义回调。
该回调用匿名函数构造的,将在适当的时间被调用。回调需要位置参数,如:
on_epoch_begin 和 on_epoch_end 需要两个位置参数:epoch、logs
on_batch_begin 和 on_batch_end 需要两个位置参数:batch、logs
on_train_begin 和 on_train_end 期望一个位置参数:logs
tf.keras.callbacks.LearningRateScheduler(
schedule, verbose=0
)
学习率调度程序。
在每个 epoch 开始时,此回调从 __init__ 提供的调度函数中获取更新的学习率值,以及当前的 epoch 和当前学习率,并将更新的学习率应用于优化器。
schedule:函数,它以epoch索引(整数,从 0 开始索引)和当前学习率(浮点数)作为输入,并返回一个新的学习率作为输出(浮点数)。
verbose:0:quiet, 1: update messages。
def scheduler(epoch, lr):
if epoch < 10:
return lr
else:
return lr * tf.math.exp(-0.1)
model = tf.keras.models.Sequential([tf.keras.layers.Dense(10)])
model.compile(tf.keras.optimizers.SGD(), loss='mse')
callback = tf.keras.callbacks.LearningRateScheduler(scheduler)
history = model.fit(np.arange(100).reshape(5, 20), np.zeros(5),
epochs=11, callbacks=[callback], verbose=0)
print(round(model.optimizer.lr.numpy(), 5))#输出0.00905
#epoch<10时,lr=0.01,epoch=10,lr=0.01*e^(0.1)=0.00905
tf.keras.callbacks.ModelCheckpoint(
filepath, monitor='val_loss', verbose=0, save_best_only=False,
save_weights_only=False, mode='auto', save_freq='epoch',
options=None, **kwargs
)
以某个频率保存 Keras 模型或模型权重。
在某个时间间隔保存模型或权重(在checkpoint文件中),以便稍后加载模型或权重以从保存的状态继续训练。
此回调提供的一些选项包括:
filepath:字符串或 PathLike,保存模型文件的路径。例如filepath= os.path.join(working_dir, 'ckpt', file_name)。 filepath 可以包含命名格式选项,这些选项将填充日志中的epoch和key的值(在 on_epoch_end 中传递)。例如:如果文件路径是 weights.{epoch:02d}-{val_loss:.2f}.hdf5,那么模型检查点将与文件名中的epoch和验证损失一起保存。文件路径的目录不应被任何其他回调重用以避免冲突。
monitor: 被监测的指标,由 Model.compile 方法设置。 在名称前加上“val_”以监控验证指标。 使用“loss”或“val_loss”来监控模型的总损失。 如将指标指定为字符串,例如“accuracy”,需要传递相同的字符串(带或不带“val_”前缀)。 如果您传递 metrics.Metric 对象,则监视器应设置为 metric.name 如果您不确定指标名称,您可以检查 history = model.fit() 返回的 history.history 字典的内容 多输出模型在指标名称上设置了额外的前缀。
verbose: 日志详细信息模式,0 或者 1 。
save_best_only:如果为True,则仅在模型被认为是“最佳”时才保存,并且不会覆盖根据监控数量最新的最佳模型。 如果文件路径不包含像 {epoch} 这样的格式选项,那么文件路径将被每个新的更好的模型覆盖。
mode: 'auto', 'min', 'max'。如果save_best_only=True,则根据监视数量的最大化或最小化做出覆盖当前保存文件的决定。对于 val_acc,这应该是max,对于 val_loss 这应该是min,等等。在auto模式下,如果监控的指标是“acc”或以“fmeasure”开头,则模式设置为max,其余时间设置为min数量。
save_weights_only: 如果 True,那么只有模型的权重会被保存,否则的话,整个模型会被保存
save_freq:'epoch' 或整数。使用 'epoch' 时,回调会在每个 epoch 之后保存模型。使用整数时,回调在这么多批次结束时保存模型。如果模型是用steps_per_execution=N 编译的,那么保存标准将每第N 批检查一次。注意,如果保存未与epochs对齐,则受监控的指标可能不太可靠(它可能反映少至 1 个批次,因为指标在每个epoch都会重置)。默认为“epoch”。
tf.keras.callbacks.ProgbarLogger(
count_mode='samples', stateful_metrics=None
)
将指标打印到标准输出的回调。
count_mode:"steps"或"samples"之一。 进度条是否应该计算并显示看到的样本或步骤。samples时,进度条不会显示当前计算到了哪一个batch,
stateful_metrics:不应该在一个epoch内平均的指标的字符串名称的可迭代对象。 此列表中的指标将按原样记录。 所有其他将随时间平均(例如损失等)。 如果未提供,则默认为模型的指标。
tf.keras.callbacks.ReduceLROnPlateau(
monitor='val_loss', factor=0.1, patience=10, verbose=0,
mode='auto', min_delta=0.0001, cooldown=0, min_lr=0, **kwargs
)
当指标停止 improve 时降低学习率。
一旦学习停滞,模型通常会受益于将学习率降低 2-10 倍。 此回调监控一个指标值,如果在“patience”数量的 epoch 内没有看到任何改进,则学习率会降低。
monitor:被监测的指标
factor:降低学习率的因素。 new_lr = lr * factor。
patience:没有改进的epoch数,之后学习率将降低。
verbose:0: quiet, 1: update messages.
mode :'auto', 'min', 'max'。 min:当监测到的指标停止减少时,学习率会降低; max:当监控的指标停止增加时,学习率会减少; auto:方向从监控指标的名称自动推断。
min_delta:改进最小变化的阈值,在该范围内认为没有改进。
cooldown:在 lr 减少后恢复正常操作之前要等待的冷却epoch数。
min_lr:学习率的下限。
tf.keras.callbacks.RemoteMonitor(
root='http://localhost:9000', path='/publish/epoch/end/',
field='data', headers=None, send_as_json=False
)
将事件流式传输到服务器。 需要requests库。 事件默认发送到 root + '/publish/epoch/end/'。 调用是 HTTP POST,带有一个 data 参数,它是一个 JSON 编码的事件数据字典。 如果 send_as_json=True,则请求的内容类型将为“application/json”。 否则序列化的 JSON 将在表单中发送。
root 字符串; 目标服务器的根 url。
path 字符串; 事件将发送到的相对于根的路径。
field 字符串; 将在其下存储数据的 JSON 字段。 仅当在表单中发送有效负载时才使用该字段(即 send_as_json 设置为 False)。
headers 字典; 可选的自定义 HTTP 标头。
send_as_json 布尔值; 请求是否应作为“application/json”发送。
tf.keras.callbacks.TerminateOnNaN()
#以下是源码
if np.isnan(loss) or np.isinf(loss):
print('Batch %d: Invalid loss, terminating training' % (batch))
self.model.stop_training = True
遇到 NaN 损失时终止训练。