好久没有更新了,今天继续更新吧!今天就讲一下TensorBoard 的使用
TensorBoard 可以用来观察 loss 的图像, 方便我们看出在训练到第几步的时候, 对应的 loss 是我们预期所想要的。 如下图所示:
除此之外, TensorBoard 还可以用来展示在训练到第几步的时候显示我们的输入的图像, 如下图所示, 显示我们训练到 2974 步时的图像:
一、TensorBoard 的安装
首先我们打开 anaconda 的终端, 我们进入到 pytorch( 本教程之前自己创建
的虚拟环境) 的虚拟环境当中( 使用指令: conda activate pytorch)
conda activate pytorch
接下来我们使用指令 pip install tensorBoard 进行安装
如果安装比较慢, 可以使用清华源进行安装, 指令为: pip install tensorBoard -i 换源地址
换源地址有:
* 阿里源: https://mirrors.aliyun.com/pypi/simple/
* 清华源: https://pypi.tuna.tsinghua.edu.cn/simple/
* 豆瓣: http://pypi.douban.com/simple/
* 中科大: https://pypi.mirrors.ustc.edu.cn/simple/
例如:如果使用清华源,那就输入下面这段代码到CMD当中。
pip install tensorBoard -i https://pypi.tuna.tsinghua.edu.cn/simple/
二、创建文件
首先我们先创建一个文件: test_tb.py
from torch.utils.tensorboard import SummaryWriter
上面这一行代码表示的是从 torch 的常用工具( utils) 里面的 tensorboard 导入 SummaryWriter 类
三、SummaryWriter 类使用
我们先来查看一下 SummaryWriter 类的官方用法, 上面我们已经讲过了可以使用 juypter 来查看, 在这里我们也可以使用 pycharm 来查看 SummaryWriter 类的官方用法, 方法是: 先按下 ctrl, 再拖动鼠标放到 SummaryWriter, 然后点击鼠标左键, 就可进入查看 SummaryWriter 类的官方用法。
接下来我们创建一个实例, 我们将它对应的事件文件存储到 logs 的文件夹下:
在这个实例当中, 通常我们会使用两个方法, 第一是 add_image(), 第二个是add_scalar(), 最后我们将 writer 进行关闭, 如下图所示:
四、dd_scalar()方法的使用
4.1查看官方文档
同样我们使用上面的方法, 先看一下 add_scalar()的官方文档。在官方文档当中:
tag 表示的是本章开头 loss 图标的标题
scalar_value 表示需要保存的数值
global_step 表示训练到多少步的时候, 训练对应的 scalar_value 的值是多少
4.2实战练习
我们来尝试一下使用 add_scalar()来绘制 y=x 的图像吧
运行后发现在文件相同路径下创建了一个 logs 的文件夹, 里面包含着一个事件文件
接下来我们来打开这个事件文件: 打开 pycharm 左下角的终端使用指令
tensorBoard --logdir=logs
logdir=事件文件所在文件夹名
这个文件被 tensorBoard 打开的窗口是在 http://localhost:6006/但是有的时候我们很多人在训练时, 打开的窗口会是同一个就会导致出现问题, 因此这里提供的解决方法是我们可以来指定 tensorBoard 打开的窗口, 使用代码:
tensorBoard --logdir=logs --port=6007
如下图所示:
接着我们点击蓝色的端口, 就可以显示出我们的图像了, 如下图所示:
五、 add_scalar()实例中的一些问题
如果我们先运行了上面实例的代码( y=x) , 则会在 logs 文件夹下生成一个事件, 接着我们想画 y=2x 的图像, 但是我们在 add_scalar()当中只对后面的 i 进行修改, 对标题“y=x” 不进行修改, 即 writer.add_scalar("y=x", 2*i, i)
接着我们再一次运行代码, 然后我们再次通过
tensorBoard --logdir=logs--port=6007
打开事件文件, 但是我们会发现图像存在问题, 如下图所示:
这是因为我们在第一次运行后会生成 y=x 的函数, 当我们再运行 y=2x 的时候, 事件会将把 y=x 图像的结尾和 y=2x 的图像相拟合就出现了上图所示的问题。官方提出的解决方案是把生成的 logs 文件夹的事件全部删除重新运行, 并且一个图像对应一个标题, 即可解决。