TensorBoard可视化基础教程

一、说明

我最常用的是使用TensorBoard观察loss以及准确度曲线,在此基础版本里只进行这两类曲线的编写说明。

二、代码编写

from torch.utils.tensorboard import SummaryWriter  #导入必须的包
#创建runs/test目录
#这会在当前目录下创建runs/test目录,所有的内容都会写入此目录中
writer = SummaryWriter("runs/test")                  

只需要以上简单的两句即可完成tensorboard的初始化工作。

1. 写入单数据

writer.add_scalar('val/loss',total_loss, epoch)
writer.add_scalar('val/accuracy',val_accurate,epoch)

第一个参数中的val代表验证集中的损失函数值(loss)图片和精度(accuracy)图像,第二个参数可理解为y轴值,第三个参数可理解为x轴值。最后得到的结果如下。
TensorBoard可视化基础教程_第1张图片
上图中的val即writer.add_scalar中第一个参数中的'/'前半部分,这个点击之后可以折叠显示。这种写法会让loss和accuracy曲线在同一行显示

而如下的写法

writer.add_scalar('val/loss',total_loss, epoch)
writer.add_scalar('train/accuracy', accuracy,  epoch)

则说明loss和accuracy隶属两个不同的类,它们将分开显示如下
TensorBoard可视化基础教程_第2张图片

总结

要使它们在同一行显示只需add_scalar第一个参数中的'/'符号前的值相同即可。

2、写入双曲线

要将两个值写到一个图里,只需要将它们组成一个字典数据即可。如下

writer.add_scalars('train/loss_accuracy', {'loss':error,'accuracy':accuracy}, epoch)

TensorBoard可视化基础教程_第3张图片

三、运行与连接

定位到定义的run目录的同级目录下,使用

tensorboard --logdir=runs

运行tensorboard程序,待出现下图所示后即说明运行成功
在这里插入图片描述
按照要求在浏览器中输入地址即可。亦可采用--port参数指定端口号。

当在docker中运行时还需要加上--host变量,它的值为hostname命令的运行结果
即在docker中的tensorboard完整的启动命令如下(6028为docker内部的端口映射到宿主机的8000端口,此时在宿主机上应该用8000端口查看)。

tensorboard --logdir=runs --port=6028 --host=$(hostname)

当在docker里要输入中文的时候发现都是乱码,原来是字符集的问题,当docker运行成功之后,使用

docker exec -it 你的docker窗口名字 env LANG=C.UTF-8 /bin/bash

即可进入docker并支持中文。然后再执行上述启动tensorboard的命令即可。

上面最后一步有个大问题,就是输入docker exec的那串命令之后,中文的问题解决了,但是却无法在外部使用浏览器连接。目前暂时的解决方法是

  1. 进入宿主机后使用sudo docker start name开启docker.
  2. 使用sudo docker attach name进入docker.
  3. 使用tmux开启一个终端,并使用这个终端运行tensorboard。注意,此时是不支持中文的。
  4. 直接断点Xshell连接。然后重新连接宿主机,使用docker exec -it 你的docker窗口名字 env LANG=C.UTF-8 /bin/bash命令激活中文。
  5. 进入docker之后再运行tmux命令,此时和上一个tmux不是同一个窗口。注意,此时是支持中文的。
  6. 麻烦的就是在两个tmux窗格之间进行切换,一个支持中文用来中文输入,一个不支持中文用来运行tensorboard。
  7. (写给自己的)在上述问题的解决过程中,如果tensorboard连接不上,则需要完全关掉docker,并关闭宿主机的ssh连接,再重新连接上进行操作。
  8. 真麻烦!!!!
  9. 忽然发现又不行了!到底咋回事???

四、使用浏览器连接远程TensorBoard

此功能需要用到XShell,打开要连接的XShell的配置项,按照如下要求配置。
TensorBoard可视化基础教程_第4张图片
即把远程的6006(即运行tensorboard时通过–port指定或默认的端口号)端口映射到本地的6006端口。当XShell连接成功之后即可通过

http://localhost:6006/

看到具体数据。

你可能感兴趣的:(人工智能,#,可视化,pytorch)