TensorBoard 是 TensorFlow 官方提供的可视化工具,可以帮助我们实时监控模型的训练指标(如 loss、accuracy)、查看模型图结构、直方图分布、参数分布、图片、嵌入向量等,是深度学习开发过程中不可或缺的利器。
在训练过程中你可能会问:
通过 TensorBoard,你可以图形化地回答这些问题。
如果你使用的是 Anaconda 或 pip,执行以下命令安装:
pip install tensorboard
我们先构建一个简单的 Keras 模型并训练 MNIST 数据集:
import tensorflow as tf
from tensorflow.keras import layers, models
# 加载数据
(x_train, y_train), (x_test, y_test) = tf.keras.datasets.mnist.load_data()
x_train = x_train / 255.0
x_test = x_test / 255.0
# 构建模型
model = models.Sequential([
layers.Flatten(input_shape=(28, 28)),
layers.Dense(128, activation='relu'),
layers.Dropout(0.2),
layers.Dense(10, activation='softmax')
])
model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
使用 TensorBoard
之前,需要指定一个日志目录用于保存训练过程数据。
import datetime
# 日志目录:包含时间戳防止重复
log_dir = "logs/fit/" + datetime.datetime.now().strftime("%Y%m%d-%H%M%S")
# 回调函数
tensorboard_callback = tf.keras.callbacks.TensorBoard(log_dir=log_dir, histogram_freq=1)
将 tensorboard_callback
传入 model.fit()
中:
model.fit(x_train, y_train,
epochs=5,
validation_data=(x_test, y_test),
callbacks=[tensorboard_callback])
在命令行输入以下命令,打开 TensorBoard 服务:
tensorboard --logdir=logs/fit
控制台会输出类似如下地址:
TensorBoard 2.X at http://localhost:6006/
浏览器打开这个地址,即可看到你的训练指标变化趋势图!
面板 | 描述 |
---|---|
Scalars | 查看 loss、accuracy 等指标随 epoch 的变化 |
Graph | 可视化计算图(模型结构) |
Histograms | 参数值分布(如权重、偏置)随时间变化 |
Distributions | 与 Histogram 类似,展示数据分布 |
Images | 可显示模型中记录的图像(如卷积特征图) |
Audio/Embedding | 用于可视化音频、文本嵌入等高级特性 |
你还可以自定义日志,比如记录每一步训练的 loss:
writer = tf.summary.create_file_writer("logs/custom")
with writer.as_default():
for step in range(100):
loss = step * 0.01
tf.summary.scalar("custom_loss", loss, step=step)
如果你使用自定义训练循环(tf.GradientTape
),可这样集成 TensorBoard:
train_log_dir = "logs/train"
train_summary_writer = tf.summary.create_file_writer(train_log_dir)
@tf.function
def train_step(x, y):
with tf.GradientTape() as tape:
pred = model(x, training=True)
loss = loss_fn(y, pred)
grads = tape.gradient(loss, model.trainable_variables)
optimizer.apply_gradients(zip(grads, model.trainable_variables))
with train_summary_writer.as_default():
tf.summary.scalar('loss', loss, step=optimizer.iterations)
步骤 | 操作 |
---|---|
1️⃣ 安装 TensorBoard | pip install tensorboard |
2️⃣ 创建日志目录 | log_dir = logs/fit/时间戳 |
3️⃣ 添加回调函数 | TensorBoard(log_dir=...) |
4️⃣ 启动服务 | tensorboard --logdir=logs/fit |
5️⃣ 打开浏览器 | http://localhost:6006/ |
histogram_freq=1
会记录直方图数据,但会稍微减慢训练速度。EarlyStopping
、ModelCheckpoint
共同调优模型。