Tensorboard常见用法示例

前言
最近在炼丹,每次都是通过打印出日志来观察模型训练的进展,不能直观的查看模型训练过程中loss等指标的变化情况,于是学习了一下tensorboard,下面通过两个简单的例子来分享tensorboard的用法。

可视化模型结构: writer.add_graph

  1. 代码
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/chenkj/tensorboard')
writer.add_graph(net,input_to_model = torch.rand(1,3,32,32))  # 在使用TensorBoard的add_graph方法时,input_to_model参数是必需的。这个参数的作用是提供一个示例输入,以便TensorBoard跟踪数据如何通过网络的各层传播。
writer.close()
  1. 查看结果

通过运行这个脚本我们可以得到一个存放在 ‘/data/chenkj/tensorboard’ 下的文件,再运行下面代码就可以启动tensorboard了,我们只需要复制这行代码打印出的网址就可以在浏览器中在线查看模型的结构了,比如输出的是 http://0.0.0.0:6007/,只需要把0.0.0.0换成你开启tensorboard的机器的ip就行了,下面其他例子都是一样的操作,后续就不赘述了。

tensorboard --logdir '/data/chenkj/tensorboard' --host 0.0.0.0

比如我就得到了如下的图,每个模块都可以像脑图一样展开和缩小,可以清楚的看到整个模型的每一层的结构,甚至是数据怎么在每一层之间流动的。
在这里插入图片描述

可视化指标变化: writer.add_scalar

  1. 代码
from torch.utils.tensorboard import SummaryWriter

writer = SummaryWriter('/data/chenkj/tensorboard')
for i in range(500):
    writer.add_scalar("x",i,i) #日志中记录x在第step i 的值
    writer.add_scalar("y",2*i,i) #日志中记录y在第step i 的值

writer.close()
  1. 结果查看
    可以看到我总共记录了两个指标的数据,命名分别是x和y,分别对应两个图,横坐标都是step,可以看到总共是500步。还有一点就是,记录的y值是乘上了2倍,所以y这个指标的纵坐标的最大值是499*2,而x的纵坐标的最大值是499。
    在这里插入图片描述

总结

上面讲到的都是自己去定义要可视化的模型或者指标数据,在使用transformers库的trainer进行炼丹的时候,是可以通过传参的方式直接将模型训练过程中的指标数据进行保存。例如,在使用Seq2SeqTrainer定义trainer时,就需要传入Seq2SeqTrainingArguments,这个Seq2SeqTrainingArguments可以定义非常多的参数,其中就可以通过report_to 这个参数选择将训练的结果和日志报告到哪些平台或服务,常见的平台就是tensorboard和wandb,感兴趣的可以自行查阅trainer的文档。

除了上面讲到的两种用法之外,还可以通过writer.add_histogram可视化参数分布,writer.add_image 或 writer.add_images可视化原始图像,writer.add_figure可视化人工绘图,感兴趣的可以自行学习。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值