1.Tensorboard
TensorBoard 是一个由 TensorFlow 提供的可视化工具,用于在深度学习任务中分析和可视化训练过程中的各种数据。虽然它是由 TensorFlow 团队开发的,但它也可以用于其他深度学习框架,如 PyTorch。TensorBoard 提供了许多有用的功能,用于监控和分析模型训练过程的不同方面:
-
训练曲线:TensorBoard 可以绘制训练和验证损失函数随时间的变化曲线,以帮助了解模型的收敛情况。
-
学习率曲线:可以跟踪学习率随训练步数的变化,以确保学习率的调整是有效的。
-
参数直方图:TensorBoard 可以显示模型中各个参数的分布情况,帮助理解权重和偏差的变化。
-
嵌入可视化:如果在训练过程中使用了嵌入(embeddings),TensorBoard 可以将高维数据嵌入到低维空间中进行可视化。
-
图可视化:可以可视化模型的计算图,了解模型的结构。
-
图像和媒体可视化:可以可视化输入图像、输出图像或其他媒体数据,以帮助您理解模型的表现。
-
自定义可视化:可以根据需要自定义可视化面板,展示关注的数据。
要使用 TensorBoard,需要在训练过程中记录相应的数据,并将其保存到 TensorBoard 的日志目录中。然后,通过在终端运行命令tensorboard --logdir=log_directory来启动 TensorBoard 服务器,其中log_directory是保存日志的目录。在浏览器中访问生成的链接,能够在 TensorBoard 中查看可视化数据。
2.如何监控
- 安装 TensorBoard:首先,确保您已经安装了 TensorFlow 或其他支持 TensorBoard 的深度学习框架。如果您正在使用 TensorFlow,TensorBoard 通常与 TensorFlow 一起安装。
- 在训练代码中添加日志记录:在您的深度学习训练代码中,您需要在适当的位置记录需要监控的数据。这可能包括训练损失、验证损失、准确率等。
- 创建 TensorBoard 日志目录:在您的训练代码中,将记录的数据保存到 TensorBoard 的日志目录中。您可以使用 TensorFlow 的 tf.summary 模块来记录这些数据。确保您在适当的地方添加类似以下代码:
# 导入 TensorFlow
import tensorflow as tf
# 创建 TensorBoard 日志目录
log_dir = "logs"
summary_writer = tf.summary.create_file_writer(log_dir)
- 在训练循环中添加记录代码:在训练循环中,使用 summary_writer 对象记录数据。例如:
# 在训练循环中记录训练损失和验证损失
with summary_writer.as_default():
tf.summary.scalar("train_loss", train_loss, step=epoch)
tf.summary.scalar("val_loss", val_loss, step=epoch)
- 启动 TensorBoard 服务器:在终端中,使用以下命令启动 TensorBoard 服务器:
tensorboard --logdir=logs
# tensorboard --logdir=logs --host 0.0.0.0
- 访问 TensorBoard 界面:在浏览器中访问生成的链接(默认为 http://localhost:6006),能够在TensorBoard 界面中查看记录的数据。
- 浏览可视化数据:在 TensorBoard 界面中,您可以浏览不同的面板,查看训练损失、验证损失、学习率、参数直方图等数据的变化。
3.代码
- 导入库(Pytorch)
from torch.utils.tensorboard import SummaryWriter
- 找到计算Miou和Loss的地方,在开始训练的地方。需要先做判断,将第一个点去掉。
writer = SummaryWriter(log_dir="logs")
while True: # cur_itrs < opts.total_itrs:
model.train()
for (images, labels) in train_loader:
# ......(省略)
if (cur_itrs) % 10 == 0:
interval_loss = interval_loss / 10
print("Epoch %d, Itrs %d/%d, Loss=%f" %
(cur_epochs, cur_itrs, opts.total_itrs, interval_loss))
# 将平均损失值写入TensorBoard日志
if (cur_itrs) / 10 > 0:
writer.add_scalar("Val Loss", interval_loss, cur_itrs)
# writer.add_scalar("Train Loss", interval_loss, cur_itrs)
interval_loss = 0.0
# ......(省略)