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...

相关推荐
云和数据.ChenGuang2 小时前
Python 重写(Override)深度解析:从 MRO 到 super() 的完整机制
java·开发语言·人工智能·python·langchain·1024程序员节
西西木科技丨Shopify开发机构2 小时前
CalDigit TS4案例:AI产品图的Shopify整站接入与验收
人工智能·shopify·独立站
2601_965448873 小时前
AI视频制作:做系列节气民俗视频音色不统一,AI 音色克隆省事的方法
人工智能·机器学习·音视频
美狐美颜SDK开放平台3 小时前
视频美颜SDK试用DEMO阶段应该测试什么?直播APP接入实操指南
开发语言·人工智能·深度学习·音视频·美颜sdk·直播美颜sdk·第三方美颜sdk
HRaitest3 小时前
秋招技术岗招聘提效:三类 AI 招聘方案的技术底层与选型逻辑
大数据·人工智能·求职招聘·ai-native
天远数科3 小时前
零信任架构实战:基于天远企业股权变更构建自动化商业银行对公授信存续期股权异动与资产抽逃预警网关
运维·人工智能·架构·自动化
车软学堂3 小时前
从测试转开发,到底要补什么
网络·人工智能·python·功能测试·单片机·车载系统·自动化
海盗12344 小时前
AI 新闻日报 10-28:Atria Dawn 完整版开源、Cursor Agent SDK 转正、Genie 4 实时世界模型
人工智能·机器人·开源·人工智能aigc
志尊宝4 小时前
AI原生前端开发(035):AI时代的工程化最佳实践总结
人工智能·ai-native
Cosolar4 小时前
不收费、不加水印、数据归你:我做了个开源的在线简历工具
后端·面试·前端框架