在PyTorch深度学习中,最常用的模型可视化工具是Facebook(中文为脸书,目前已改名为Meta)公司开源的Visdom,本节通过案例详细介绍该模型可视化工具。
9.1.1 Visdom简介
Visdom可以直接接受来自PyTorch的张量,而不用转化成NumPy中的数组,从而运行效率很高。此外,Visdom可以直接在内存中获取数据,毫秒级刷新,速度很快。
Visdom的安装很简单,直接执行以下命令即可:
pip install visdom
开启服务,因为visdom本质上是一个类似于Jupyter Notebook 的Web服务器,在使用之前需要在终端打开服务,代码如下:
python -m visdom.server
正常执行后,根据提示在浏览器中输入相应地址即可,默认地址为:
如果出现蓝底空白的页面,并且上排有一些条形框,表示安装使用成功,如图9-1所示。
图9-1 Visdom服务器界面
Visdom目前支持的图形API如下:
- vis.scatter:2D或3D散点图
- vis.line:线图
- vis.updateTrace:更新现有的线/散点图
- vis.stem:茎叶图
- vis.heatmap:热图地块
- vis.bar:条形图
- vis.histogram:直方图
- vis.boxplot:盒子
- vis.surf:表面重复
- vis.contour:等高线图
- vis.quiver:颤抖的情节
- vis.mesh:网格图
这些API的确切输入类型有所不同,尽管大多数API 的输入包含一个tensor X(保存数据)和一个可选的tensor Y(保存标签或者时间戳)。所有的绘图函数都接收一个可选参数win,用来将图画到一个特定的窗格上。每个绘图函数也会返回当前绘图的win。也可以指定绘出的图添加到哪个可视化空间的分区上。
Visdom同时支持PyTorch的tensor和Numpy的ndarray两种数据结构,但不支持Python的int、float等类型,因此每次传入时都需先将数据转成ndarray或tensor。上述操作的参数一般不同,但有两个参数是绝大多数操作都具备的:
- win:用于指定pane的名字,如果不指定,visdom将自动分配一个新的pane。如果两次操作指定的win名字一样,新的操作将覆盖当前pane的内容,因此建议每次操作都重新指定win。
- opts:选项,接收一个字典,常见的option包括title、xlabel、ylabel、width等,主要用于设置pane的显示格式。
之前提到过,每次操作都会覆盖之前的数值,但往往我们在训练网络的过程中需不断更新数值,如损失值等,这时就需要指定参数update='append'来避免覆盖之前的数值。
除了使用update参数以外,还可以使用vis.updateTrace方法来更新图,但updateTrace不仅能在指定窗格上新增一个和已有数据相互独立的痕迹,还能像update='append'那样在同一条痕迹上追加数据。
9.1.3 动手练习:识别手写数字
......
执行成功后,在visdom网页可以看到实时更新的训练过程的数据变化,每一个epoch测试数据更新一次,如图9-15所示。
图9-15 实时更新的训练图
三、小结
本例使用Visdom对手写数字数据集的识别过程进行了可视化建模。
9.2 TensorBoard
Tensorboard是TensorFlow的一个附加工具,可以记录训练过程的数字、图像等内容,以方便研究人员观察神经网络训练过程,本节通过案例介绍该模型可视化工具。
......
三、小结
本例探索了深度学习中损失和准确率之间的关系。
模型测试集和训练集上的损失曲线,如图9-23所示。
图9-23 损失曲线
模型测试集和训练集上的准确率曲线,如图9-24所示。
图9-24 准确率曲线
9.3 Pytorchviz
Pytorchviz是一个程序包,用于创建PyTorch执行图和轨迹的可视化,本节通过案例介绍该模型可视化工具。
......
图9-25 模型可视化
9.4 Netron
Netron也是一个支持Pytorch的可视化工具,它的开发者是微软的Lutz Roeder,操作简单快捷,就像保存文件、打开文件一样,简单高效。本节通过案例介绍模型可视化工具Netron。
图9-27 模型可视化