tensorboardX介绍
Tensorboard 是 TensorFlow 的一个附加工具,可以记录训练过程的数字、图像等内容,以方便研究人员观察神经网络训练过程。但是对于 PyTorch 等其他神经网络训练框架并没有功能像 Tensorboard 一样全面的类似工具,一些已有的工具功能有限或使用起来比较困难 (tensorboard_logger, visdom等) 。TensorboardX 这个工具使得 TensorFlow 外的其他神经网络框架也可以使用到 Tensorboard 的便捷功能。 .安装了tensorflow会自动安装tensorboard
tensorboardx依赖于tensorboard和ternsorflow tensorflow依赖于tensorboard
安装
pip install tensorboardX
创建SummaryWriter实例
以下展示了三种初始化 SummaryWriter 的方法:
1.提供一个路径,将使用该路径来保存日志
代码:
from tensorboardX import SummaryWriter
writer = SummaryWriter('runs/another_scalar_example/11')
目录结构: ![在这里插入图片描述](https://img-blog.csdnimg.cn/3c07bed208a2487f9c0e30aca841ebe5.png)
2.无参数,默认将使用 runs/日期时间 路径来保存日志
代码:
from tensorboardX import SummaryWriter
writer = SummaryWriter()
目录结构: ![在这里插入图片描述](https://img-blog.csdnimg.cn/57499a40fe2945248754a81ad9a200f9.png)
3.提供一个 comment 参数,将使用 runs/日期时间-comment 路径来保存日志
代码:
from tensorboardX import SummaryWriter
writer = SummaryWriter(comment="abc")
目录结构: ![在这里插入图片描述](https://img-blog.csdnimg.cn/39fe25530f9346b8a5ac2d39bd2da8b9.png) 接下来,我们就可以调用 SummaryWriter 实例的各种 add_something 方法向日志中写入不同类型的数据了。
各种add方法使用
add_scalar
方法各参数介绍
add_scalar(tag, scalar_value, global_step=None, walltime=None)
- tag (string): 数据名称,不同名称的数据使用不同曲线展示
- scalar_value (float): 数字常量值
- global_step (int, optional): 训练的 step
- walltime (float, optional): 记录发生的时间,默认为 time.time()
举例
1.例子1 代码:
from tensorboardX import SummaryWriter
writer = SummaryWriter()
for i in range(10):
writer.add_scalar('quadratic', i**2, global_step=i)
writer.add_scalar('exponential', 2**i, global_step=i)
在浏览器可视化界面中效果如下: ![在这里插入图片描述](https://img-blog.csdnimg.cn/40979cd37e2f46b4b7a63ae3a8c2a364.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAYmFpZHVfMzkyMTEzNTA=,size_20,color_FFFFFF,t_70,g_se,x_16)
不同名称的数据使用不同曲线展示
2.例子2 代码:
from tensorboardX import SummaryWriter
writer = SummaryWriter()
for i in range(10):
writer.add_scalar('quadratic', i**2, global_step=i)
writer.add_scalar('quadratic', i**4, global_step=i)
在浏览器可视化界面中效果如下:
![在这里插入图片描述](https://img-blog.csdnimg.cn/a4bfbd6277ae40e88bfdb11b82123c5f.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAYmFpZHVfMzkyMTEzNTA=,size_19,color_FFFFFF,t_70,g_se,x_16)
本质过程就是描点,然后用直线按照描点顺序把各点链接起来
再例如 代码:
from tensorboardX import SummaryWriter
writer = SummaryWriter()
for i in range(10):
writer.add_scalar('quadratic', i, global_step=i)
writer.add_scalar('quadratic', i**2, global_step=i)
for i in range(10):
writer.add_scalar('quadratic', -i**3, global_step=i)
在浏览器可视化界面中效果如下: ![在这里插入图片描述](https://img-blog.csdnimg.cn/22af1d8e508640b290e6131aef7f8803.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAYmFpZHVfMzkyMTEzNTA=,size_18,color_FFFFFF,t_70,g_se,x_16) 3.例子3 第一次执行程序代码:
from tensorboardX import SummaryWriter
writer = SummaryWriter("runs/exp")
for i in range(10):
writer.add_scalar('quadratic', i**2, global_step=i)
第二次执行程序代码(第二次执行不删除第一次生成的目录文件夹):
from tensorboardX import SummaryWriter
writer = SummaryWriter("runs/exp")
for i in range(10):
writer.add_scalar('quadratic', -i**2, global_step=i)
最终的目录结构: ![在这里插入图片描述](https://img-blog.csdnimg.cn/c0b95c4557794e7a8b0721ac630ace76.png) 在浏览器可视化界面中效果如下: ![在这里插入图片描述](https://img-blog.csdnimg.cn/355099da834140f79ab04ff17997e8a2.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAYmFpZHVfMzkyMTEzNTA=,size_16,color_FFFFFF,t_70,g_se,x_16)
要启动tensorboard,必须指定它的logdir(默认为runs): tensorboard会在你指定的这个log-dir里面做路径搜索,寻找所有的events文件以及子文件夹中的events文件。在同一个目录下的两个events文件,数据名称相同,最终可视化结果是两个阶段的描点按照顺序的组合。也就是第一阶段最后一个点和第二阶段第一个点也有直线连接。
4.例子4 目录结构: ![在这里插入图片描述](https://img-blog.csdnimg.cn/eebfd3edbb3046e4a2f105b70d374eb1.png) 在浏览器可视化界面中效果如下: ![在这里插入图片描述](https://img-blog.csdnimg.cn/54d303299b9d4f8fac5cd3e93ac8788f.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAYmFpZHVfMzkyMTEzNTA=,size_15,color_FFFFFF,t_70,g_se,x_16)
tensorboard会在你指定的这个log-dir里面做路径搜索,寻找所有的events文件以及子文件夹中的events文件。路径相同的events文件可视化的图形线条颜色一样,如果文件路径不同但是数据名称相同,则会被用不同线条颜色画到同一个图里面。
add_graph
使用 add_graph 方法来可视化一个神经网络。
参数介绍
add_graph(model, input_to_model=None, verbose=False, **kwargs)
- model (torch.nn.Module): 待可视化的网络模型
- input_to_model (torch.Tensor or list of torch.Tensor, optional): 待输入神经网络的变量或一组变量。输入的是一个元组,且各变量的维度一定要满足网络的实际输入需求,因为网络的输入变量个数大于等于1.
|