tensorboardX是为解决pytorch框架可视化训练问题的,不过据说目前pytorch已经支持使用tensorboard进行可视化了。

TensorboardX可以提供中很多的可视化方式,本文主要介绍scalar 和 graph,这在深度网络调试时主要使用的,一个用于显示训练情况,一个用于显示网络结构。

使用TensorboardX

首先,需要创建一个 SummaryWriter 的示例:

from tensorboardX import SummaryWriter

# Creates writer1 object.
# The log will be saved in 'runs/exp'
writer1 = SummaryWriter('runs/exp')

# Creates writer2 object with auto generated file name
# The log directory will be something like 'runs/Aug20-17-20-33'
writer2 = SummaryWriter()

# Creates writer3 object with auto generated file name, the comment will be appended to the filename.
# The log directory will be something like 'runs/Aug20-17-20-33-resnet'
writer3 = SummaryWriter(comment='resnet')

 以上展示了三种初始化 SummaryWriter 的方法:

1)提供一个路径,将使用该路径来保存日志
2)无参数,默认将使用 runs/日期时间 路径来保存日志
3)提供一个 comment 参数,将使用 runs/日期时间-comment 路径来保存日志
一般来讲,我们对于每次实验新建一个路径不同的 SummaryWriter,也叫一个 run,如 runs/exp1、runs/exp2。

接下来,我们就可以调用 SummaryWriter 实例的各种 add_something 方法向日志中写入不同类型的数据了。想要在浏览器中查看可视化这些数据,只要在命令行中开启 tensorboard 即可:

tensorboard --logdir=<your_log_dir>

其中的 <your_log_dir> 既可以是单个 run 的路径,如上面 writer1 生成的 runs/exp;也可以是多个 run 的父目录,如 runs/ 下面可能会有很多的子文件夹,每个文件夹都代表了一次实验,我们令 --logdir=runs/ 就可以在 tensorboard 可视化界面中方便地横向比较 runs/ 下不同次实验所得数据的差异。

添加数据

1)标量(scalar)

使用 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()

需要注意,这里的 scalar_value 一定是 float 类型,如果是 PyTorch scalar tensor,则需要调用 .item() 方法获取其数值。我们一般会使用 add_scalar 方法来记录训练过程的 loss、accuracy、learning rate 等数值的变化,直观地监控训练过程。

Example

from tensorboardX import SummaryWriter
writer = SummaryWriter('runs/scalar_example')
for i in range(10):
    writer.add_scalar('quadratic', i**2, global_step=i)
    writer.add_scalar('exponential', 2**i, global_step=i)

这里,我们在一个路径为 runs/scalar_example 的 run 中分别写入了二次函数数据 quadratic 和指数函数数据 exponential,在浏览器可视化界面中效果如下:

如何获得深度学习可视化特征图 可视化训练_如何获得深度学习可视化特征图

writer = SummaryWriter('runs/another_scalar_example')
for i in range(10):
    writer.add_scalar('quadratic', i**3, global_step=i)
    writer.add_scalar('exponential', 3**i, global_step=i)

 接下来我们在另一个路径为 runs/another_scalar_example 的 run 中写入名称相同但参数不同的二次函数和指数函数数据,可视化效果如下。我们发现相同名称的量值被放在了同一张图表中展示,方便进行对比观察。同时,我们还可以在屏幕左侧的 runs 栏选择要查看哪些 run 的数据。如下图所示:

如何获得深度学习可视化特征图 可视化训练_如何获得深度学习可视化特征图_02

 

2)运行图 (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): 待输入神经网络的变量或一组变量(即神经网络的输入)

该方法可以可视化神经网络模型,TensorboardX 给出了一个官方样例大家可以尝试。样例运行效果如下:

如何获得深度学习可视化特征图 可视化训练_如何获得深度学习可视化特征图_03

一些tips

  • tensorboard 有缓存,如果进行了一些 runs 文件夹的删除操作,最好重启 tensorboard,以避免无效数据干扰展示效果。
  • 如果执行 add 操作后没有实时在网页可视化界面看到效果,试试重启 tensorboard。

参看博客: 

 

一些操作实例

方便理解tensorboardX的具体使用过程

1)Graph:

如何获得深度学习可视化特征图 可视化训练_数据_04

运行结果

如何获得深度学习可视化特征图 可视化训练_scala_05

点击Net1部分可以将其网络展开,查看网络内部构造,如下图所示。其他部分可以继续展开查看详情。 

如何获得深度学习可视化特征图 可视化训练_数据_06

2)实现线性回归的训练过程中的loss可视化和模型的保存 

如何获得深度学习可视化特征图 可视化训练_如何获得深度学习可视化特征图_07

打开tensorboard可视化结果如下:

模型可视化:

如何获得深度学习可视化特征图 可视化训练_神经网络_08

损失可视化:

如何获得深度学习可视化特征图 可视化训练_如何获得深度学习可视化特征图_09

3)综合Demo 

本Demo代码为TensorboardX提供的官方Demo代码。

如何获得深度学习可视化特征图 可视化训练_神经网络_10

可视化结果如下:

如何获得深度学习可视化特征图 可视化训练_数据_11

 参考博客:https://www.jianshu.com/p/46eb3004beca

 

远程可视化

原理
建立ssh隧道,实现远程端口到本地端口的转发
具体来说就是将远程服务器的6006端口(tensorboard默认将数据放在6006端口)转发到本地的16006端口,在本地对16006端口的访问即是对远程6006端口的访问,当然,转发到本地某一端口不是限定的,可自由选择。

1)Xshell方式

利用Xshell隧道
首先 隧道 在Xshell > 文件 > 当前会话属性 > 连接 > SSH > 隧道 
点添加 , 之后 源主机和目标主机 都是 localhost不变,不要自作聪明去给改成本机IP和服务器地址了。 
然后就是一个小技巧了,网上的方法多用本机的16006端口。但其实完全没有必要这样做。 
直接将侦听端口 和 目标端口 都设置成6006(tensorboard的访问地址) 即可。 

如何获得深度学习可视化特征图 可视化训练_scala_12

运行方法

在服务器端运行 tensorboard --logdir=model_dir(模型地址)

注意模型地址不需要加引号

(tensorboard --logdir=/home/zhongzhanhui/PycharmProject/VDCNN/logs)
本机浏览器访问 127.0.0.1:6006 
然后就可以开始看tensorboard的内容啦

如何获得深度学习可视化特征图 可视化训练_神经网络_13

如何获得深度学习可视化特征图 可视化训练_如何获得深度学习可视化特征图_14

 

如何获得深度学习可视化特征图 可视化训练_神经网络_15

 参考博客:

2)直接在终端输入

ssh -L 16006:127.0.0.1:6006 account@server.address

训练完模型后(也可以在训练的同时),输入如下命令:

tensorboard --logdir=/path/to/log-directory