TensorBoard
在数据训练过程中,我们需要一个可观化的工具查看数据的变化过程、状态,TensorBoard就是这样的数据可视化的工具。
TensorBoard在训练过程中很有用, 特别是后期探究模型的输出。早斯Pytorch自研了TensorBoardX,只是安装时需要tensorflow支持,Pytorch 1.1后引入了TensorBoard,无需tensforflow, 所以1.1之后可独立安装TensorBoard。
附录章节有更多指引性内容
使用指南
- 安装
tensorboard --logdir="logs"
并启动 - 在py代码里引入
from torch.utils.tensorboard import SummaryWriter
编写相应的代码 - 用完之后需要
将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:通道
备注
- 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)
同样适用。 - 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更多方法
- PyCharm中,鼠标光标移到WummeryWirter,再用
CTRL+鼠标点击
,可调出文档查看更详细的方法。 - 笔记无意发现一个读书笔记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)
[参考]