打卡day47
一、TensorBoard简介
1.1 发展历程
TensorBoard是TensorFlow生态中的官方可视化工具,同时也支持PyTorch等其他深度学习框架。它最初于2015年随TensorFlow框架一起发布,旨在满足深度学习研究者对复杂模型训练过程的可视化需求。此后,TensorBoard不断更新和完善,新增了图像/音频可视化、直方图、多运行对比等功能,并在2019年后与PyTorch实现了兼容。如今,TensorBoard已经成为深度学习领域不可或缺的可视化工具之一。
1.2 核心原理
TensorBoard的核心原理非常简单:在训练过程中,将训练数据(如损失值、准确率、权重分布等)写入日志文件(.tfevents文件),然后通过启动本地网页服务读取日志文件并将其可视化为图表、图像等形式。这种方式不仅避免了手动打印数据和绘制图表的繁琐过程,还能实时监控训练过程中的数据变化,方便我们根据可视化结果动态调整训练策略。
二、TensorBoard的基本操作
2.1 安装与启动
在使用TensorBoard之前,我们需要先安装它。通过以下命令可以快速完成安装:
pip install tensorboard -i https://pypi.tuna.tsinghua.edu.cn/simple
安装完成后,我们可以在项目根目录下运行以下命令启动TensorBoard服务:
tensorboard --logdir=runs
其中,--logdir参数指定了日志文件的存储目录。启动服务后,TensorBoard会生成一个本地访问链接(通常是http://localhost:6006),我们可以通过浏览器访问该链接查看可视化结果。
2.2 日志目录管理
为了避免日志文件的重复覆盖,TensorBoard提供了自动管理日志目录的功能。在代码中,我们可以通过以下方式创建独立的日志目录:
log_dir = 'runs/cifar10_mlp_experiment'
if os.path.exists(log_dir):i = 1while os.path.exists(f"{log_dir}_{i}"):i += 1log_dir = f"{log_dir}_{i}"
writer = SummaryWriter(log_dir)
这样,每次运行代码时都会生成一个新的日志目录,方便我们对比不同训练任务的结果。
2.3 记录标量数据
标量数据(如损失值、准确率、学习率等)是训练过程中最常用的数据类型。我们可以通过add_scalar
方法将标量数据写入日志文件:
writer.add_scalar('Train/Batch_Loss', batch_loss, global_step)
writer.add_scalar('Train/Batch_Accuracy', batch_acc, global_step)
在TensorBoard的SCALARS
选项卡中,我们可以查看这些标量数据的变化曲线,并支持多运行对比。
2.4 可视化模型结构
TensorBoard还支持可视化模型结构,这有助于我们直观地了解模型的层次结构和数据流向。我们可以通过以下代码将模型结构写入日志文件:
dataiter = iter(train_loader)
images, labels = next(dataiter)
images = images.to(device)
writer.add_graph(model, images)
在TensorBoard的GRAPHS
选项卡中,我们可以查看模型的计算图结构。
2.5 可视化图像数据
对于图像数据,TensorBoard提供了强大的可视化功能。我们可以将训练图像、错误预测样本等可视化为图像网格:
img_grid = torchvision.utils.make_grid(images[:8].cpu())
writer.add_image('原始训练图像', img_grid)
在TensorBoard的IMAGES
选项卡中,我们可以查看这些图像数据。
2.6 记录权重和梯度直方图
为了监控模型参数的变化,我们可以记录权重和梯度的分布直方图:
for name, param in model.named_parameters():writer.add_histogram(f'weights/{name}', param, global_step)if param.grad is not None:writer.add_histogram(f'grads/{name}', param.grad, global_step)
在TensorBoard的HISTOGRAMS
选项卡中,我们可以查看权重和梯度的分布变化,从而诊断训练过程中的问题(如梯度消失或爆炸)。
@浙大疏锦行