Keras 3 API 文档 / 回调API / TensorBoard

TensorBoard

[source]

TensorBoard class

keras.callbacks.TensorBoard(
    log_dir="logs",
    histogram_freq=0,
    write_graph=True,
    write_images=False,
    write_steps_per_second=False,
    update_freq="epoch",
    profile_batch=0,
    embeddings_freq=0,
    embeddings_metadata=None,
)

启用TensorBoard的可视化功能.

TensorBoard是与TensorFlow一起提供的可视化工具.使用此回调需要安装TensorFlow.

此回调记录TensorBoard的事件,包括:

  • 指标摘要图
  • 训练图可视化
  • 权重直方图
  • 采样分析

当在model.evaluate()或常规验证中使用时,除了每个epoch的摘要外,还会记录评估指标与model.optimizer.iterations的摘要.指标名称将以evaluation为前缀,model.optimizer.iterations将作为可视化TensorBoard中的步骤.

如果您通过pip安装了TensorFlow,应该能够从命令行启动TensorBoard:

tensorboard --logdir=path_to_your_logs

您可以在此处找到更多关于TensorBoard的信息.

参数: log_dir: 保存日志文件的目录路径,由TensorBoard解析.例如, log_dir = os.path.join(working_dir, 'logs'). 此目录不应被任何其他回调重用. histogram_freq: 计算模型层权重直方图的频率(以epoch为单位).如果设置为0, 则不会计算直方图.必须指定验证数据(或分割)以进行直方图可视化. write_graph: (目前不支持) 是否在TensorBoard中可视化图. 请注意,当write_graph设置为True时,日志文件可能会变得非常大. write_images: 是否将模型权重写入TensorBoard以可视化为图像. write_steps_per_second: 是否将训练步骤每秒记录到TensorBoard中.这支持epoch和batch频率记录. update_freq: "batch""epoch"或整数.当使用"epoch"时, 在每个epoch结束后将损失和指标写入TensorBoard. 如果使用整数,例如1000,所有指标和损失 (包括通过Model.compile添加的自定义指标)将在每1000个批次后记录到TensorBoard."batch"是1的同义词, 意味着它们将在每个批次后写入. 但请注意,过于频繁地写入TensorBoard可能会减慢训练速度,尤其是在使用分布策略时,因为它会带来额外的同步开销. 批量级摘要写入也可以通过train_step覆盖实现.请参阅 TensorBoard Scalars教程 # noqa: E501 了解更多详情. profile_batch: (目前不支持) 分析批次以采样计算特性. profile_batch必须是非负整数或整数元组. 一对正整数表示要分析的批次范围. 默认情况下,分析是禁用的. embeddings_freq: 可视化嵌入层的频率(以epoch为单位).如果设置为0, 则不会可视化嵌入. embeddings_metadata: 映射嵌入层名称到保存该层元数据的文件名的字典. 如果所有嵌入层使用相同的元数据文件,可以传递单个文件名.

示例:

tensorboard_callback = keras.callbacks.TensorBoard(log_dir="./logs")
model.fit(x_train, y_train, epochs=2, callbacks=[tensorboard_callback])
# 然后运行tensorboard命令以查看可视化.

在子类化模型中自定义批量级摘要:

class MyModel(keras.Model):

    def build(self, _):
        self.dense = keras.layers.Dense(10)

    def call(self, x):
        outputs = self.dense(x)
        tf.summary.histogram('outputs', outputs)
        return outputs

model = MyModel()
model.compile('sgd', 'mse')

# 确保设置`update_freq=N`以每N个批次记录一次批量级摘要.
# 除了`model.call()`中包含的任何[`tf.summary`](https://www.tensorflow.org/api_docs/python/tf/summary)外,
# 通过`Model.compile`添加的指标将在每N个批次后记录.
tb_callback = keras.callbacks.TensorBoard('./logs', update_freq=1)
model.fit(x_train, y_train, callbacks=[tb_callback])

在Functional API模型中自定义批量级摘要:

def my_summary(x):
    tf.summary.histogram('x', x)
    return x

inputs = keras.Input(10)
x = keras.layers.Dense(10)(inputs)
outputs = keras.layers.Lambda(my_summary)(x)
model = keras.Model(inputs, outputs)
model.compile('sgd', 'mse')

# 确保设置`update_freq=N`以每N个批次记录一次批量级摘要.
# 除了`Model.call`中包含的任何[`tf.summary`](https://www.tensorflow.org/api_docs/python/tf/summary)外,
# 通过`Model.compile`添加的指标将在每N个批次后记录.
tb_callback = keras.callbacks.TensorBoard('./logs', update_freq=1)
model.fit(x_train, y_train, callbacks=[tb_callback])

分析:

# 分析单个批次,例如第5个批次.
tensorboard_callback = keras.callbacks.TensorBoard(
    log_dir='./logs', profile_batch=5)
model.fit(x_train, y_train, epochs=2, callbacks=[tensorboard_callback])

# 分析一批次范围,例如从10到20.
tensorboard_callback = keras.callbacks.TensorBoard(
    log_dir='./logs', profile_batch=(10,20))
model.fit(x_train, y_train, epochs=2, callbacks=[tensorboard_callback])