7.TensorBoard的使用(一)
TensorBoard是Google开发的一个机器学习可视化工具。
7.TensorBoard的使用(一)
TensorBoard简介
TensorBoard是Google开发的一个机器学习可视化工具。其主要用于记录机器学习过程,例如:
- 记录损失变化、准确率变化等
- 记录图片变化、语音变化、文本变化等,例如在做GAN时,可以过一段时间记录一张生成的图片
- 绘制模型
学 TensorBoard 目的:
- 训练过程中loss是如何变化的
- 模型在不同阶段的输出
会使用到的两个函数:
- add_scalar() 的使用 (常用来绘制 train/val loss)
- add_image() 的使用 (常用来观察训练结果)
1.SummaryWriter类
在pycharm里面创建一个名为test_tb的python文件,导入TensorBoard中的类 SummaryWriter :
from torch.utils.tensorboard import SummaryWriter

前面我们查看一个类如何使用是通过jupyter里运行help函数来完成的,PyCharm里可以使用另一种方法。
PyCharm查看一个类如何使用(功能):在PyCharm中,按住Ctrl键,把鼠标移到类SummaryWriter上,点击自动跳转。

可以看到对SummaryWriter类的介绍,是一个直接向 log_dir 文件夹写入的事件文件,可以被 TensorBoard 进行解析
初始化函数:
def __init__(self, log_dir=None):

实例化SummaryWriter类
writer = SummaryWriter("logs") # 创建一个实例,把对应的事件文件存储到logs文件夹下
用到的两个方法:
writer.add_image() #添加image
writer.add_scalar() #添加数
writer.close()

add_scalar() 方法的使用
同样的办法,按住Ctrl键,把鼠标移到add_scalar()方法上,点击自动跳转,可以查看add_scalar() 方法的使用
def add_scalar(
self,
tag,
scalar_value,
global_step=None,
walltime=None,
new_style=False,
double_precision=False,
):
添加一个标量数据到 Summary 当中,需要参数
- tag**:**Data指定方式,类似于图表的title
- scalar_value**:**需要保存的数值(y轴)
- global_step**:**训练到多少步(x轴)
add_scalar使用及其参数解释
绘图: writer.add_scalar(参数1,参数2,参数3)
- 第一个参数:生成图像的名称
- 第二个参数:X轴的值
- 第三个参数:Y轴的值
例:y=x
from torch.utils.tensorboard import SummaryWriter #导入SummaryWriter类
#创建实例
writer=SummaryWriter("logs") #把对应的事件文件存储到logs文件夹下
#两个方法
# writer.add_image()
# y=x
for i in range(100):
writer.add_scalar("y=x",i,i)
writer.close()
运行失败,提示缺少TensorBoard模块,所以要先安装一下

安装TensorBoard
在 Anaconda 命令行中激活 pytorch 环境,或直接在 PyCharm 的 Terminal 的 pytorch 环境中安装
对于Python 3.x,输入:
pip3 install tensorboard
对于Python 2.x,输入:
pip install tensorboard
如果你使用的是conda环境,可以使用以下命令来安装:
conda install -c conda-forge tensorboard
这里我使用前两种方法都报错了,所以又试了第三种方法,安装成功了

重新运行python文件,又报错了,元类冲突,这个问题可能是由于TensorBoard与Python 3.6中的元类(metaclass)实现不兼容引起的,更新或降级特定的依赖关系可以解决元类冲突。我们需要Tensorflow 1.x版本,Tensorflow 1.15版本可用于64-bit Python 3.6的Windows

先把之前下载的TensorBoard移除掉
conda remove tensorboard

Anaconda默认使用的是官方镜像源,下载Tensorflow太慢了,更换镜像。Anaconda镜像配置 http://t.csdnimg.cn/rk2Ly
对于Tensorflow1.15 及更早版本,CPU 和 GPU 软件包是分开的:
pip install tensorflow==1.15 # CPU
pip install tensorflow-gpu==1.15 # GPU
这里选择第二个命令,重新安装:

然后安装tensorboard
pip install tensorboard
再次运行python文件,可以生成log文件夹,里面是TensorBoard的一些事件文件, 但是控制台提示TensorFlow调试过程中出现的问题,根据提示:缺少cudart64_100.dll文件, 警告就是没事,可以不管它,但我们还是处理一下。


先去网站下载cudart64_100.dll:https://www.dll-files.com/cudart64_100.dll.html
下载好了之后就要将这个文件放到CUDA的安装目录下,一般在这里:
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\bin
如果有的话,把下载的cudart64_101.dll文件直接放里面,重启一下就好了。
下面是没有这个目录时候的解决方法,很简单,直接把文件放到你运行程序的虚拟环境的根目录就可以了,
比如,我当前程序用的环境是pytorch,直接在Anaconda里面的env里面找到pytorch,把文件放进去,程序在加载的时候就可以找到了。
重新运行python文件,可以看到提示,这条信息不是一个错误,而是一个通知,表明成功加载了动态链接库文件 cudart64_100.dll

打开事件文件
在 Terminal 里输入:
tensorboard --logdir=logs # logdir=事件文件所在文件夹名
结果如下:

点击链接:
为了防止和别人冲突(一台服务器上有好几个人训练,默认打开的都是6006端口),也可以指定端口,命令如下:
tensorboard --logdir=logs --port=6007

例:y=2x

运行test_tb.py,然后刷新一下浏览器

可以看到x轴等于100的时候,y轴等于200
title 和 y 不一致的情况
让title为y=2x,Y轴实际是3x

重新运行一下文件,刷新浏览器看看

说明每向 writer 中写入新的事件,也记录了上一个事件
解决办法
把logs文件夹下的所有文件删掉,程序删掉,重新开始
或者重新写一个子文件,即创建新的 SummaryWriter(“新文件夹”)
删掉logs下的文件,重新运行代码,在 Terminal 里按 Ctrl+C ,再输入命令:
tensorboard --logdir=logs --port=6007
就可以出现名字为y=2x,但实际纵坐标是y=3x数值的图像
以上即是显示 train_loss 的一个方式
建新的 SummaryWriter(“新文件夹”)
删掉logs下的文件,重新运行代码,在 Terminal 里按 Ctrl+C ,再输入命令:
tensorboard --logdir=logs --port=6007
就可以出现名字为y=2x,但实际纵坐标是y=3x数值的图像
以上即是显示 train_loss 的一个方式
更多推荐


所有评论(0)