torch.utils.tensorboard用法

相比于visdom,tensorborad对结果可视化集成的更好,界面相对更为美观,内容更为丰富,实现过程也更为简单。

1. Tensorboard面板介绍:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5LiJ6KeJ,size_20,color_FFFFFF,t_70,g_se,x_16

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5LiJ6KeJ,size_20,color_FFFFFF,t_70,g_se,x_16

2. 使用tensorboard记录结果

 直接上代码,这部分内容参考了torch.utils.tensorborad文档内容(torch.utils.tensorboard — PyTorch 1.10.0 documentation)


import numpy as np
import torch
from torch import nn

# 导入tensorboard写入器
from torch.utils.tensorboard import SummaryWriter


# 使用SummaryWriter实例化tensorboard
# 如果SummaryWriter里面给出路径, tensorboard就会创建对应的路径, 用于储存记录的结果
# 如果SummaryWriter里面给出路径, tensorboard就会创建默认文件夹runs用于储存结果
# 使用该实例化的对象writer即可实现将所记录的对象添加到tensorboard记录的结果中
writer = SummaryWriter('./path/to/the/folder2')

for n_iter in range(100):
    # writer.add_scalar函数用于添加标量值
    # add_scalar(tags, scalar_value, global_stop)
        # tags: string, 记录对象的标签
        # scalar_valud: float, 记录的数值
        # global_step: int, x轴的数值
    writer.add_scalar('Loss/train', np.random.random(), n_iter)
    writer.add_scalar('Loss/test', np.random.random(), n_iter)
    writer.add_scalar('Accuracy/train', np.random.random(), n_iter)
    writer.add_scalar('Accuracy/test', np.random.random(), n_iter)

#############################################
# writer.add_scalars(main_tag, tag_scalar_dict, global_step=None)
    # 该函数用于将多个scalar添加到同一个图中
    # main_tag: string, 父标签
    # tag_scalar_dict: dict, 将多个scalar组合在一起的字典对象,
        # 该字典的key表示tag, value为记录的scalar值
    # global_step: int, 图片的x轴
#############################################
# 该函数可以同时比较train, valid的Loss和评价指标的变化, 更有助于判断模型的训练情况
for i in range(100):
    writer.add_scalars(
        'run_14h', {
            'xsinx':i*np.sin(i/5),
            'xcosx':i*np.cos(i/5),
            'tanx': np.tan(i/5)
        }, i
    )

#############################################
# writer.add_histogram(tag, values, global_step=None)
    # 该函数用于记录直方图
    # tag: string, 标签
    # values: (torch.Tensor, numpy.array), 用于绘制直方图的值
    # global_step: int, x轴取值
#############################################
# 该函数可以用于记录训练过程中, 模型weight和bias取值的分布情况
for i in range(10):
    x = np.random.random(1000)
    writer.add_histogram('distribution centers', x + i, i)


#############################################
# writer.add_image(tag, image_tensor, global_step=None)
    # 该函数用于记录图片image, 需要注意的是, 当使用该函数的时候, 需要用到pillow包
    # tag: string, 标签
    # img_tensor: (torch.Tensor, numpy.array), shape=(3, H, W), 图片的像素值
    # global_step: int, x轴取值
#############################################
# 该函数可用于实现模型训练过程中的图片特征的可视化
img = np.zeros((3, 100, 100))
img[0] = np.arange(0, 10000).reshape(100, 100) / 10000
img[1] = 1 - np.arange(0, 10000).reshape(100, 100) / 10000
img_HWC = np.zeros((100, 100, 3))
img_HWC[:, :, 0] = np.arange(0, 10000).reshape(100, 100) / 10000
img_HWC[:, :, 1] = 1 - np.arange(0, 10000).reshape(100, 100) / 10000

writer.add_image('my_image', img, 0)
writer.add_image('my_image_HWC', img_HWC, 0, dataformats='HWC')

#############################################
# writer.add_text(tag, text_string, global_step=None)
    # 该函数用于记录文本字符串
    # tag: string, 标签
    # text_string: string, 需要记录的文本
    # global_step: int, x轴取值
#############################################
# 该函数应该主要用于文本分析的任务
writer.add_text('LSTM', 'This is an lstm', 0)


#############################################
# writer.add_graph(
#   model, input_to_model=None, verbose=False, use_strict_trace=True
# )
# 该函数用于记录graph数据
    # model: torch.nn.Module, 需要绘制的model
    # input_to_model: (torch.Tensor, list of torch.Tensor), model的输入
    # verbose: bool, 是否在控制面板上打印graph的结构
    # use_strict_trace: bool, 
#############################################
# 该函数应该主要用于文本分析的任务

class MyModel(nn.Module):
    """
    简单的MLP
    """
    def __init__(self):
        super(MyModel, self).__init__()
        self.layers = nn.Sequential(
            nn.Linear(5, 3),
            nn.ReLU(True),
            nn.Linear(3, 2),
            nn.ReLU(True)
        )

    def forward(self, x):
        return self.layers(x)

mymodel = MyModel()
X = torch.randn(10, 5)
writer.add_graph(mymodel, X)

# 关闭writer
writer.close()

3. 命令行启动tensorboard用于可视化结果

在命令行输入如下命令:

tensorboard --logdir logpath --port 6069
# --logdir 后面跟的是tensorboard记录对象的储存路径, 该路径下可以有多个tensorboard储存结果
# --port 后面跟的是端口

然后就可以在http://localhost:6069/中查看tensorboard记录的结果。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值