tf.keras.callbacks

tf.keras.callbacks.BaseLogger() 

tf.keras.callbacks.BaseLogger(
    stateful_metrics=None
)

积累指标在epoch内的平均值,此回调会自动应用于每个 Keras 模型。

不应该在一个epoch内平均的指标的字符串名称的可迭代对象或列表。此列表中的指标将按原样记录在 on_epoch_end 中。 其他所有指标将在 on_epoch_end 中取平均值。

 tf.keras.callbacks.CSVLogger

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

keras.callbacks.EarlyStopping

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

tf.keras.callbacks.History()

将事件记录到 History 对象中。此回调会自动应用于每个 Keras 模型。模型的 fit 方法返回 History 对象。

tf.keras.callbacks.LambdaCallback

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

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

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文件中),以便稍后加载模型或权重以从保存的状态继续训练。

此回调提供的一些选项包括:

  • 是只保留到目前为止已经达到“best performance”的模型,还是不管性能如何都在每个 epoch 结束时保存模型。
  • 'best'的定义; 要监控的数量以及应该最大化还是最小化。
  • 它应该保存的频率。 目前,回调支持在每个 epoch 结束时保存,或者在固定数量的训练批次后保存。
  • 是只保存权重,还是保存整个模型。

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()

tf.keras.callbacks.ProgbarLogger(
    count_mode='samples', stateful_metrics=None
)

将指标打印到标准输出的回调。

count_mode:"steps"或"samples"之一。 进度条是否应该计算并显示看到的样本或步骤。samples时,进度条不会显示当前计算到了哪一个batch,

stateful_metrics:不应该在一个epoch内平均的指标的字符串名称的可迭代对象。 此列表中的指标将按原样记录。 所有其他将随时间平均(例如损失等)。 如果未提供,则默认为模型的指标。 

tf.keras.callbacks.ReduceLROnPlateau()

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

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()

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 损失时终止训练。

你可能感兴趣的:(TensorFlow,tensorflow)