深度学习模型训练可视化(TensorBoard可视化)

简介: 深度学习模型训练可视化(TensorBoard可视化)

你是否有这样的疑惑?


在我们完成深度学习项目工程中,很多时候我们自己构建模型结构,或者在学习深度学习算法的时候,由于算法结构过于复杂,很难充分理解模型结构层次


你是否想看到自己的模型训练指标与参数的变化情况


很多时候,我们自己构建完成训练后,需要在通过修改参数来评估模型的好坏,同时还需要对相应的指标进行可视化,这样是不是有些麻烦。


它来了!!!


TensorBoard是一款神奇的可视化辅助工具,它能够很好的和pytorch进行配合,本文将从如下几个方面展开:


  1. TensorBoard可视化流程
  2. 可视化方法
  3. TensorBoard界面交互

1. TensorBoard可视化流程


首先在pytorch项目中指定一个目录创建一个torch.utils.tensorboard.SummaryWriter日志写入器。

然后根据需要的可视化信息,利用写入器将相关的模型结构、指标,图像写入到指定目录下

关闭写入器

最后通过终端输入命令,在命令中传入目录参数,启动TensorBoard。

a9ea37c638f34632ba1f4adcbe138356.png


1.1 在这里补充一点终端如何启动Tensorboard


这里以我的项目目录为例


\torchproject
  \data
    \tensorboard
      \events.out.tfevents....
  \ten.py


写入器目录为data/tensorboard,项目代码和Tensorboard代码都在ten.py文件中,写入器将相应信息写入到目录中,会生成一个events.out.tfevents…文件。

生成完events文件,就可以打开终端,进入到data目录下运行如下命令


python3 -m  tensorboard.main --logdir=“自己的目录”
• 1


在运行的响应的内容中点击http://localhost:6006链接。即可进行TensorBoard界面中。


2. 可视化方法


2.1 可视化模型结构 writer.add_graph


import torch
from torch import nn
from torch.utils.tensorboard import SummaryWriter
class Net(nn.Module):
  def __init__(self):
    super(Net, self).__init__()
    self.conv1 = nn.Conv2d(in_channels=3,out_channels=32,kernel_size = 3)
    self.pool = nn.MaxPool2d(kernel_size = 2,stride = 2)
    self.conv2 = nn.Conv2d(in_channels=32,out_channels=64,kernel_size = 5)
    self.dropout = nn.Dropout2d(p = 0.1)
    self.adaptive_pool = nn.AdaptiveMaxPool2d((1,1))
    self.flatten = nn.Flatten()
    self.linear1 = nn.Linear(64,32)
    self.relu = nn.ReLU()
    self.linear2 = nn.Linear(32,1)
    self.sigmoid = nn.Sigmoid()
  def forward(self,x):
    x = self.conv1(x)
    x = self.pool(x)
    x = self.conv2(x)
    x = self.pool(x)
    x = self.dropout(x)
    x = self.adaptive_pool(x)
    x = self.flatten(x)
    x = self.linear1(x)
    x = self.relu(x)
    x = self.linear2(x)
    y = self.sigmoid(x)
    return y
net = Net()
writer = SummaryWriter('./data/tensorboard')
writer.add_graph(net,input_to_model = torch.rand(1,3,32,32))
writer.close()

00e328ba981643768ab68565a52d3c8e.png


2.2 可视化指标变化 writer.add_scalar


import numpy as np
import torch
from torch.utils.tensorboard import SummaryWriter
# f(x) = a*x**2 + b*x + c的最小值
x = torch.tensor(0.0,requires_grad = True) # x需要被求导
a = torch.tensor(1.0)
b = torch.tensor(-2.0)
c = torch.tensor(1.0)
optimizer = torch.optim.SGD(params=[x],lr = 0.01)
def f(x):
  result = a*torch.pow(x,2) + b*x + c
  return(result)
writer = SummaryWriter('./data/tensorboard')
for i in range(500):
  optimizer.zero_grad()
  y = f(x)
  y.backward()
  optimizer.step()
  writer.add_scalar("x",x.item(),i) #日志中记录x在第step i 的值
  writer.add_scalar("y",y.item(),i) #日志中记录y在第step i 的值
writer.close()

e285359a0695406595866f04c2d89dd8.png


2.3 可视化参数分布 writer.add_histogram


import numpy as np
import torch
from torch.utils.tensorboard import SummaryWriter
# 创建正态分布的张量模拟参数矩阵
def norm(mean,std):
  t = std*torch.randn((100,20))+mean
  return t
writer = SummaryWriter('./data/tensorboard')
for step,mean in enumerate(range(-10,10,1)):
  w = norm(mean,1)
  writer.add_histogram("w",w, step)
  writer.flush()
writer.close()

3192661d2a1c4ca9b8775afd93d278b4.png

2.4 可视化原始图像 writer.add_image

import torch
import torchvision
from torch import nn
from torch.utils.data import Dataset,DataLoader
from torchvision import transforms,datasets
transform_train = transforms.Compose([transforms.ToTensor()])
transform_valid = transforms.Compose([transforms.ToTensor()])
ds_train = datasets.ImageFolder("./data/cifar2/train/",transform = transform_train,target_transform= lambda t:torch.tensor([t]).float())
ds_valid = datasets.ImageFolder("./data/cifar2/test/",transform = transform_train,target_transform= lambda t:torch.tensor([t]).float())
dl_train = DataLoader(ds_train,batch_size = 50,shuffle = True,num_workers=3)
dl_valid = DataLoader(ds_valid,batch_size = 50,shuffle = True,num_workers=3)
dl_train_iter = iter(dl_train)
images, labels = dl_train_iter.next()
# 仅查看一张图片
writer = SummaryWriter('./data/tensorboard')
writer.add_image('images[0]', images[0])
writer.close()
# 将多张图片拼接成一张图片,中间用黑色网格分割
writer = SummaryWriter('./data/tensorboard')
# create grid of images
img_grid = torchvision.utils.make_grid(images)
writer.add_image('image_grid', img_grid)
writer.close()
# 将多张图片直接写入
writer = SummaryWriter('./data/tensorboard')
writer.add_images("images",images,global_step = 0)
writer.close()

a2ef390ecf7b4571949416a9de61dee8.png


2.5 可视化人工绘图 writer.add_figure


import torch
import torchvision
from torch import nn
from torch.utils.data import Dataset,DataLoader
from torchvision import transforms,datasets
transform_train = transforms.Compose([transforms.ToTensor()])
transform_valid = transforms.Compose([transforms.ToTensor()])
ds_train = datasets.ImageFolder("./data/cifar2/train/",transform = transform_train,target_transform= lambda t:torch.tensor([t]).float())
ds_valid = datasets.ImageFolder("./data/cifar2/test/",transform = transform_train,target_transform= lambda
t:torch.tensor([t]).float())
from matplotlib import pyplot as plt
figure = plt.figure(figsize=(8,8))
for i in range(9):
  img,label = ds_train[i]
  img = img.permute(1,2,0)
  ax=plt.subplot(3,3,i+1)
  ax.imshow(img.numpy())
  ax.set_title("label = %d"%label.item())
  ax.set_xticks([])
  ax.set_yticks([])
writer = SummaryWriter('./data/tensorboard')
writer.add_figure('figure',figure,global_step=0)
writer.close()


3. TensorBoard界面交互


简单实现一个实例


import numpy as np
# SummaryWriter用来创建一个writer,可以记录我们想要可视化的数据。
from torch.utils.tensorboard import SummaryWriter
writer = SummaryWriter('data/tensorboard')
for x in range(100):
    # 曲线名称,y轴,x轴
    writer.add_scalar('y=2x', x * 2, x)
    writer.add_scalar('y=pow(2, x)', 2 ** x, x)
    writer.add_scalars('data/scalar_group', {"xsinx": x * np.sin(x),
                                             "xcosx": x * np.cos(x),
                                             "arctanx": np.arctan(x)}, x)
writer.close()


得到的界面如下所示:

现在开始对界面的功能逐一介绍


第一部分(1)

1.SCALARS表示我们记录的数据的类型

2.下面的图片表示我们还可以记录的数据类型有那些

下拉后可以看到具体可以记录哪些类型的

3.刷新按钮

4.设置多长时间来读取eventfile,在模型训练的时候我们可以实时的监控模型的变化

第二部分(2):


show data download links 前面如果打勾表示:我们可以将data数据下载下来,下载的结果为csv表格。

1a4b20ff96094590ace921bf2f1b6988.png

c9a73543503a498db44ddd59a6ba93ff.png


表示是否忽略离群点,如果右边一幅图数据点并没有绘制完成,当我们取消勾选,我们就会发现我们的曲线就是完整的曲线。


b5e27c4a86224b25ae3f90da51d171f0.png

选择排序方法的功能,如果我们一张图有多条曲线,那么下面的黑框就会把这些曲线对应的值显示出来,这一功能会调整值排序的方式,默认default。


39122de339c44b718b01a71c6ac7132c.png

对曲线进行平滑处理。

de98944c2cbb452ba09c98df77553e8e.png


表示我们X轴的设置,

Horizontal Axis表示横轴:

STEP表示原始数据作为横轴,RELATIVE和WALL都是以时间作为横轴,单位是小时,RELATIVE是相对时间,WALL是绝对时间。


第三部分(3):


1b195c1d08d440789ed653d78edb6f08.png


runs显示所有的 event file,可以选择展示某些 event file 的图像,其中正方形按钮是多选,圆形按钮是单选



相关文章
|
4月前
|
机器学习/深度学习 算法 定位技术
Baumer工业相机堡盟工业相机如何通过YoloV8深度学习模型实现裂缝的检测识别(C#代码UI界面版)
本项目基于YOLOv8模型与C#界面,结合Baumer工业相机,实现裂缝的高效检测识别。支持图像、视频及摄像头输入,具备高精度与实时性,适用于桥梁、路面、隧道等多种工业场景。
538 27
|
3月前
|
机器学习/深度学习 数据可视化 算法
深度学习模型结构复杂、参数众多,如何更直观地深入理解你的模型?
深度学习模型虽应用广泛,但其“黑箱”特性导致可解释性不足,尤其在金融、医疗等敏感领域,模型决策逻辑的透明性至关重要。本文聚焦深度学习可解释性中的可视化分析,介绍模型结构、特征、参数及输入激活的可视化方法,帮助理解模型行为、提升透明度,并推动其在关键领域的安全应用。
367 0
|
2月前
|
机器学习/深度学习 存储 PyTorch
Neural ODE原理与PyTorch实现:深度学习模型的自适应深度调节
Neural ODE将神经网络与微分方程结合,用连续思维建模数据演化,突破传统离散层的限制,实现自适应深度与高效连续学习。
159 3
Neural ODE原理与PyTorch实现:深度学习模型的自适应深度调节
|
1月前
|
机器学习/深度学习 数据采集 人工智能
深度学习实战指南:从神经网络基础到模型优化的完整攻略
🌟 蒋星熠Jaxonic,AI探索者。深耕深度学习,从神经网络到Transformer,用代码践行智能革命。分享实战经验,助你构建CV、NLP模型,共赴二进制星辰大海。
|
6月前
|
机器学习/深度学习 人工智能 供应链
从概念到商业价值:AI、机器学习与深度学习全景指南
在这个科技飞速发展的时代🚀,人工智能正以惊人的速度渗透到我们的生活和工作中👀。但面对铺天盖地的AI术语和概念,很多人感到困惑不已😣。"AI"、"机器学习"、"深度学习"和"神经网络"到底有什么区别?它们如何相互关联?如何利用这些技术提升工作效率和创造价值?
|
4月前
|
机器学习/深度学习 人工智能 PyTorch
AI 基础知识从 0.2 到 0.3——构建你的第一个深度学习模型
本文以 MNIST 手写数字识别为切入点,介绍了深度学习的基本原理与实现流程,帮助读者建立起对神经网络建模过程的系统性理解。
604 15
AI 基础知识从 0.2 到 0.3——构建你的第一个深度学习模型
|
2月前
|
机器学习/深度学习 数据采集 传感器
【WOA-CNN-LSTM】基于鲸鱼算法优化深度学习预测模型的超参数研究(Matlab代码实现)
【WOA-CNN-LSTM】基于鲸鱼算法优化深度学习预测模型的超参数研究(Matlab代码实现)
211 0
|
4月前
|
机器学习/深度学习 人工智能 自然语言处理
AI 基础知识从 0.3 到 0.4——如何选对深度学习模型?
本系列文章从机器学习基础出发,逐步深入至深度学习与Transformer模型,探讨AI关键技术原理及应用。内容涵盖模型架构解析、典型模型对比、预训练与微调策略,并结合Hugging Face平台进行实战演示,适合初学者与开发者系统学习AI核心知识。
450 15
|
4月前
|
机器学习/深度学习 人工智能 自然语言处理
深度学习模型、算法与应用的全方位解析
深度学习,作为人工智能(AI)的一个重要分支,已经在多个领域产生了革命性的影响。从图像识别到自然语言处理,从语音识别到自动驾驶,深度学习无处不在。本篇博客将深入探讨深度学习的模型、算法及其在各个领域的应用。
917 3
|
5月前
|
机器学习/深度学习 存储 PyTorch
PyTorch + MLFlow 实战:从零构建可追踪的深度学习模型训练系统
本文通过使用 Kaggle 数据集训练情感分析模型的实例,详细演示了如何将 PyTorch 与 MLFlow 进行深度集成,实现完整的实验跟踪、模型记录和结果可复现性管理。文章将系统性地介绍训练代码的核心组件,展示指标和工件的记录方法,并提供 MLFlow UI 的详细界面截图。
259 2
PyTorch + MLFlow 实战:从零构建可追踪的深度学习模型训练系统