在 TensorFlow.org 上查看 | 在 Google Colab 中运行 | 在 GitHub 上查看源代码 | 下载笔记本 |
概述
TensorBoard 的 **图形仪表板** 是检查 TensorFlow 模型的强大工具。您可以快速查看模型结构的概念图,并确保它与您的预期设计相匹配。您还可以查看操作级图形,以了解 TensorFlow 如何理解您的程序。检查操作级图形可以帮助您了解如何更改模型。例如,如果训练进度比预期慢,您可以重新设计模型。
本教程简要概述了如何生成图形诊断数据并在 TensorBoard 的图形仪表板中对其进行可视化。您将为 Fashion-MNIST 数据集定义和训练一个简单的 Keras Sequential 模型,并学习如何记录和检查模型图形。您还将使用跟踪 API 为使用新的 tf.function
注释创建的函数生成图形数据。
设置
# Load the TensorBoard notebook extension.
%load_ext tensorboard
from datetime import datetime
from packaging import version
import tensorflow as tf
from tensorflow import keras
print("TensorFlow version: ", tf.__version__)
assert version.parse(tf.__version__).release[0] >= 2, \
"This notebook requires TensorFlow 2.0 or above."
TensorFlow version: 2.2.0
import tensorboard
tensorboard.__version__
'2.2.1'
# Clear any logs from previous runs
rm -rf ./logs/
定义 Keras 模型
在本例中,分类器是一个简单的四层 Sequential 模型。
# Define the model.
model = keras.models.Sequential([
keras.layers.Flatten(input_shape=(28, 28)),
keras.layers.Dense(32, activation='relu'),
keras.layers.Dropout(0.2),
keras.layers.Dense(10, activation='softmax')
])
model.compile(
optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
下载并准备训练数据。
(train_images, train_labels), _ = keras.datasets.fashion_mnist.load_data()
train_images = train_images / 255.0
训练模型并记录数据
在训练之前,定义 Keras TensorBoard 回调,指定日志目录。通过将此回调传递给 Model.fit(),您可以确保记录图形数据以在 TensorBoard 中进行可视化。
# Define the Keras TensorBoard callback.
logdir="logs/fit/" + datetime.now().strftime("%Y%m%d-%H%M%S")
tensorboard_callback = keras.callbacks.TensorBoard(log_dir=logdir)
# Train the model.
model.fit(
train_images,
train_labels,
batch_size=64,
epochs=5,
callbacks=[tensorboard_callback])
Epoch 1/5 938/938 [==============================] - 2s 2ms/step - loss: 0.6955 - accuracy: 0.7618 Epoch 2/5 938/938 [==============================] - 2s 2ms/step - loss: 0.4877 - accuracy: 0.8296 Epoch 3/5 938/938 [==============================] - 2s 2ms/step - loss: 0.4458 - accuracy: 0.8414 Epoch 4/5 938/938 [==============================] - 2s 2ms/step - loss: 0.4246 - accuracy: 0.8476 Epoch 5/5 938/938 [==============================] - 2s 2ms/step - loss: 0.4117 - accuracy: 0.8508 <tensorflow.python.keras.callbacks.History at 0x7f656ecc3fd0>
操作级图形
启动 TensorBoard 并等待几秒钟,直到 UI 加载。点击顶部的“图形”选择图形仪表板。
%tensorboard --logdir logs
默认情况下,TensorBoard 显示 **操作级图形**。(在左侧,您可以看到“默认”标签已选中。)请注意,图形是反转的;数据从下到上流动,因此它与代码相比是颠倒的。但是,您可以看到图形与 Keras 模型定义非常匹配,并带有指向其他计算节点的额外边。
图形通常非常大,因此您可以操作图形可视化
- 滚动以 **缩放** 进出
- 拖动以 **平移**
- 双击切换 **节点展开**(节点可以是其他节点的容器)
您还可以通过点击节点查看元数据。这使您可以查看输入、输出、形状和其他详细信息。
概念图
除了执行图之外,TensorBoard 还显示 **概念图**。这是仅显示 Keras 模型的视图。如果您正在重用保存的模型,并且想要检查或验证其结构,这可能很有用。
要查看概念图,请选择“keras”标签。对于本例,您将看到一个折叠的 **Sequential** 节点。双击该节点以查看模型的结构
tf.functions 的图形
到目前为止的示例描述了 Keras 模型的图形,这些图形是通过定义 Keras 层并调用 Model.fit() 创建的。
您可能会遇到需要使用 tf.function
注释对 "自动图化",即转换 Python 计算函数为高性能 TensorFlow 图形的情况。对于这些情况,您使用 **TensorFlow 摘要跟踪 API** 记录自动图化函数以在 TensorBoard 中进行可视化。
要使用摘要跟踪 API
- 使用
tf.function
定义并注释函数 - 在函数调用站点之前立即使用
tf.summary.trace_on()
。 - 通过传递
profiler=True
将配置文件信息(内存、CPU 时间)添加到图形 - 使用摘要文件写入器,调用
tf.summary.trace_export()
保存日志数据
然后,您可以使用 TensorBoard 查看函数的行为。
# The function to be traced.
@tf.function
def my_func(x, y):
# A simple hand-rolled layer.
return tf.nn.relu(tf.matmul(x, y))
# Set up logging.
stamp = datetime.now().strftime("%Y%m%d-%H%M%S")
logdir = 'logs/func/%s' % stamp
writer = tf.summary.create_file_writer(logdir)
# Sample data for your function.
x = tf.random.uniform((3, 3))
y = tf.random.uniform((3, 3))
# Bracket the function call with
# tf.summary.trace_on() and tf.summary.trace_export().
tf.summary.trace_on(graph=True, profiler=True)
# Call only one tf.function when tracing.
z = my_func(x, y)
with writer.as_default():
tf.summary.trace_export(
name="my_func_trace",
step=0,
profiler_outdir=logdir)
%tensorboard --logdir logs/func
您现在可以看到 TensorBoard 理解的函数结构。点击“配置文件”单选按钮以查看 CPU 和内存统计信息。