PyTorch入门备忘-2-数据可视化-TensorBoard

TensorBoard

在数据训练过程中,我们需要一个可观化的工具查看数据的变化过程、状态,TensorBoard就是这样的数据可视化的工具。

TensorBoard在训练过程中很有用, 特别是后期探究模型的输出。早斯Pytorch自研了TensorBoardX,只是安装时需要tensorflow支持,Pytorch 1.1后引入了TensorBoard,无需tensforflow, 所以1.1之后可独立安装TensorBoard。

附录章节有更多指引性内容

使用指南

  1. 安装tensorboard --logdir="logs" 并启动
  2. 在py代码里引入from torch.utils.tensorboard import SummaryWriter编写相应的代码
  3. 用完之后需要将SummaryWriter关闭close

关于日志保存路径

  • 如果代码指定了输出路径writer = SummaryWriter('logs')则日志会保存在对应的路径下;
  • 如果不指定writer = SummaryWriter(),日志默认会保存在 run/<日期时间>
  • 不管指定与不指定tensorboard启动命令与SummaryWriter(..)都需要对应
ini 复制代码
writer = SummaryWriter('logs')
...
# 控制台
tensorboard --logdir="logs"

ini 复制代码
writer = SummaryWriter()
...
# 控制台
tensorboard

端口也可以指定,默认是6006

4.改变tensorboard启动端口

ini 复制代码
tensorboard  --port=6000

默认是6006,更多信息看 '相关知识',

SummaryWriter

初始化

ini 复制代码
writer = SummaryWriter("logs")

add_image - 用于展示图片, 可用于检查模型的输入,监测 feature map 的变化,或是观察 weight

声明

python 复制代码
def add_image(
    self, tag, img_tensor, global_step=None, walltime=None, dataformats="CHW"
):

主要参数:

  • tag: title
  • img_tensor: ndarray
  • global_step: x轴,步数
  • dataformat: HCW (H:高度,W:宽度, C:通道

备注

  1. img_tensor: 图片值 0~255之间,默认(3,H,W),其中3表示通道3。可用torchvision.utils.make_grid() 将图片转为相应通道或者add_images()。math:(1, H, W), :math:(H, W), :math:(H, W, 3)同样适用。
  2. dataformats: 在torch内提供直接排序通道的参数 dataformats='HWC', ndarray与其不一致,需要指定顺序(e.g. CHW, HWC, HW.), 如下:
ini 复制代码
ants_img_path = "data_for_tensorboard/train/ants_image/0013035.jpg"
img_PIL = Image.open(ants_img_path)
img_array = np.array(img_PIL)
writer.add_image("test", img_array, 1, dataformats="HWC")

add_scalar - 用于展示标量,常用于对比,如 Train Loss 和 Valid Loss 的比较等。

声明

ini 复制代码
def add_scalar(
    self,
    tag,
    scalar_value,
    global_step=None,
    walltime=None,
    new_style=False,
    double_precision=False,
):

主要参数:

  • tag: title
  • scale_value: tensor类型的图片
  • global_step: x轴,步数
  • walltime: 记录发生的时间,默认为 time.time()

add_graph - 绘制(神经)网络结构拓扑

声明

python 复制代码
def add_graph(
    self, model, input_to_model=None, verbose=False, use_strict_trace=True
):

主要参数说明

  • model:需要可视化的模型,必须是nn.Module
  • input_to_model:模型输入的数据
  • verbose:是否打印计算图结构信息

close - 用完之后要关闭

py 复制代码
writer.close()

更多方法见"相关知识".

实战

安装tensorboard

py 复制代码
pip install tensorboard

# 或 conda虚拟环境下
# conda install tensorboard

编写SummaryWriter

导入

torch.utils.tensorboard.writer.SummaryWriter

代码

代码功能:

  • 图片
    • 从PIL转为tensor
    • 将图片输出到tensorboard展示
  • 标量
    • 展示1至10步的标量数据
    • 需要注意:数据拟合问题
py 复制代码
from torch.utils.tensorboard import SummaryWriter
from PIL import Image
import numpy as np

# 实始化一个SummaryWriter, 图径logs,该路么要和tensorboard --logdir=logs 相对
# 如不写,默认为runs/<日期时间>
writer = SummaryWriter("logs")

"""
add_image的使用
"""
ants_img_path = "data_for_tensorboard/train/ants_image/0013035.jpg"
img_PIL = Image.open(ants_img_path)
# 将img_path路径对应的图片对象转为numpy类型, 并赋值给image
img_array = np.array(img_PIL)
# 查看图片通道 默认的通道以在最后一位
# 从PIL到numpy,需要在add_images()中指定shape中每一个数字/维表示的含义,即要设置add_image中dataformats参数
writer.add_image("test", img_array, 1, dataformats="HWC")

bees_img_path = "data_for_tensorboard/train/bees_image/16838648_415acd9e3f.jpg"
bees_img_PIL = Image.open(bees_img_path)
bees_img_array = np.array(bees_img_PIL)
writer.add_image("test", bees_img_array, 3, dataformats="HWC")


"""
# add_scalar() 的使用
"""
for i in range(200):
    # 图是的展示是根据title来里合的
    # 当x和y轴改变时,需要将title一起改否则图像会有问题 (被拟合在一块,除非本身就需要执行这样的拟合),
    # 当存错误的拟合问题时:解决办法是将logs文件下的文件删除重新开始
    writer.add_scalar("y=x", i, i)


# 关闭
writer.close()

如果不同算法的数据在同一个tag里显示,会存在拟合问题。
解决办法:删除重做,将不同算法的数据分在不同的tag里。

启动tensorboard

shell 复制代码
tensorboard  --logdir=logs

参数说明

  • logdir是指输出路径,用SummaryWriter配置的路径保持一到处,默认为 runs/<日期时间>
  • 默认端口:6006 端口可修改

成功启动会有如下提示

vbnet 复制代码
TensorFlow installation not found - running with reduced feature set.  
Serving TensorBoard on localhost; to expose to the network, use a proxy or pass --bind_all  
TensorBoard 2.15.1 at http://localhost:6006/ (Press CTRL+C to quit)  

浏览

在浏览器上打开http://localhost:6006/

标量

图片

tensorboardX和tensorboard

在tensorboard还没有引入PyTorch之前,PyTorch自研tensorboardX,但安装时需要装tnesorflow。而tensorboard则不需要。 所以在网上可以看到有些文章让安装tensorboardX的情况。

tensorboard是在 PyTorch1.1之后引入的,所以请根据自身主机上PyTorch的版本选择是安装tensorboard还是tensorboardX,。另外还有文章称装tensorboard需要tensorboardX支持,但笔者试了一把,似乎只要tensorboard就成。

如果机器上有tensflow,应该就自带了tensorboard

SummaryWriter更多方法

  1. PyCharm中,鼠标光标移到WummeryWirter,再用CTRL+鼠标点击,可调出文档查看更详细的方法。
  2. 笔记无意发现一个读书笔记TensorboardX学习笔记,对于方法有中文解释,虽然是TensorboardX但Tensorboard同样适用

其他主要方法有

sql 复制代码
add_scalars(main_tag, tag_scalar_dict, global_step=None, walltime=None) - 多个标量数据

add_histogram(tag, values, global_step=None, bins='tensorflow', walltime=None, max_bins=None) - 直方图或多分位数折线图 

add_figure(tag, figure, global_step=None, close=True, walltime=None) - matplotlib图像

add_video(tag, vid_tensor, global_step=None, fps=4, walltime=None) - 视频数据

...

export_scalars_to_json 

pil-image 转为 tensor

ini 复制代码
from PIL import Image
import numpy as np
# ...
ants_img_path = "data_for_tensorboard/train/ants_image/0013035.jpg"
img_PIL = Image.open(ants_img_path)
# 将img_path路径对应的图片对象转为numpy类型, 并赋值给image
img_array = np.array(img_PIL)

[参考]

PyTorch深度学习快速入门教程

基于transformers的自然语言处理(NLP)入门

www.cnblogs.com/lucky-light...

blog.csdn.net/weixin_4313...

相关推荐
游客5204 分钟前
opencv中的各种滤波器简介
图像处理·人工智能·python·opencv·计算机视觉
一位小说男主5 分钟前
编码器与解码器:从‘乱码’到‘通话’
人工智能·深度学习
goTsHgo9 分钟前
在 Spring Boot 的 MVC 框架中 路径匹配的实现 详解
spring boot·后端·mvc
深圳南柯电子21 分钟前
深圳南柯电子|电子设备EMC测试整改:常见问题与解决方案
人工智能
waicsdn_haha21 分钟前
Java/JDK下载、安装及环境配置超详细教程【Windows10、macOS和Linux图文详解】
java·运维·服务器·开发语言·windows·后端·jdk
Kai HVZ22 分钟前
《OpenCV计算机视觉》--介绍及基础操作
人工智能·opencv·计算机视觉
biter008826 分钟前
opencv(15) OpenCV背景减除器(Background Subtractors)学习
人工智能·opencv·学习
Q_192849990631 分钟前
基于Spring Boot的摄影器材租赁回收系统
java·spring boot·后端
吃个糖糖33 分钟前
35 Opencv 亚像素角点检测
人工智能·opencv·计算机视觉
良许Linux36 分钟前
0.96寸OLED显示屏详解
linux·服务器·后端·互联网