TensorBoard是一种可视化的诊断工具,功能非常强大,可以显示模型结构、训练过程,显示包括图片、文字和音频数据。在训练的过程中启动TensorBoard,能够实时观看训练过程。TensorBoard虽是Tensorflow团队开发的,但PyTorch也极力推荐使用,因此,若未安装Tensorflow,可独立安装TensorBoard,指令如下:
pip install tensorboard
TensorBoard包含下列功能。
(1)追踪损失和准确率等效能衡量指标(Metrics),并以可视化呈现。
(2)显示运算图(Computational Graph):包括张量运算(tensor operation)和神经层(layers)。
(3)直方图(Histogram):显示训练过程中的权重(weights)、偏差(bias)的概率分配。
(4)词嵌入(Word Embedding)展示:把词嵌入向量降维,投影到三维空间来显示。画面右边可输入任意单词,例如King,就会出现下图,将与其相近的单词显示出来,原理是通过词向量(Word2Vec)将每个单词转为向量,再利用Cosine_Similarity计算相似性,详情会在后续章节介绍。
(5)显示图片、文字和音频数据。
首先在程序中必须将信息写入工作记录文件(Log),之后,可以启动TensorBoard观看工作记录文件(Log),我们直接以范例展示。
范例1.先介绍写入工作记录文件的API,包括影像、语音均可写入,甚至嵌入(Embedding)向量(后续章节说明)。
下列程序代码请参考【05_04_TensorBoard.ipynb】。
(1)载入套件。
(2)使用内建数据集FashionMNIST,建立transform、trainset、trainloader,设定批量=4。
(3)设定log目录,开启log文件。
(4)写入图片。
(5)这时可先启动TensorBoard,观看执行结果。单击“IMAGES”标签,如果没有出现标签,可至下拉式菜单单击,出现4张图像。
启动TensorBoard:需指定Log目录,如下。
tensorboard --logdir=runs
也可以在Jupyter Notebook启动:先加载TensorBoard notebook扩充程序(Extension),即可在Jupyter notebook启动TensorBoard。
%load_ext tensorboard
%tensorboard --logdir=runs
启动后即可使用网页浏览器观看:http://localhost:6006/。
(6)语音也可以写入Log,要注意下列事项:
需另外安装套件,以支持语音处理,Windows操作系统要安装PySoundFile,Linux操作系统则要安装sox。
使用DataLoader,要读取一批多笔语音数据时,要注意每一笔数据要等长,否则next指令会出错,故常设定batch_size=1。
语音写入Log,要加参数采样率(sample_rate),否则播放会变异音:writer.add_audio('audio', waveform, sample_rate=sample_rate)。
(7)下载语音数据集:multiprocessing.Process可平行下载yes/no内建数据集。
(8)语音写入Log:含播放语音。
(9)使用TensorBoard,单击“GRAPHS”标签,观看执行结果,可单击“Play”(三角形符号)播放语音,每个文件有8个音频。
(10)若使用DataLoader将语音写入Log,程序代码如下。
(11)将语音写入Log:注意需加[0],因next()回传的是数组。
(12)模型也可以写入Log:先建立模型。
(13)写入模型:第一个参数为模型对象,第二个参数为模型输入。
(14)使用TensorBoard,单击“GRAPHS”标签,观看执行结果。
双击(Double click) Net方块,可看到详细模型结构。
双击(Double click) input/output方块,可看到输入/输出规格。
(15)显示嵌入向量投影机(Projector):将影像转换为向量,连同类别名称一并写入Log。不过,指令writer.add_embedding会发生错误,需先用下列指令修正。
(16)随机抽样100笔数据,转为二维向量,写入Log。
单击“PROJECTOR”标签,观看执行结果:可看到相同类别的影像会聚集在一起。
(17)最后记得将缓冲区清空,并关闭Log。
范例2.记录训练过程的损失:以MNIST辨识作测试,前面加载数据与建立模型程序代码的流程不变,在训练时将步骤序号及损失写入Log。以下仅列出关键的程序代码。
下列程序代码请参考【05_06_手写阿拉伯数字辨识_TensorBoard.ipynb】。
(1)训练时将步骤序号( n )及损失(loss)写入Log。writer.add_scalar可写入单一变数,第一个参数为变量名称,第二个参数为变数值。
(2)启动TensorBoard:tensorboard --logdir=runs_2。
(3)启动后即可单击“SCALARS”标签,使用网页浏览器观看:http://localhost:6006/。
TensorBoard随着时间增加的功能越来越多,以上我们只做了很简单的试验,如果需要更详细的信息,可以参阅TensorBoard官网的指南 [7] 。
TensorFlow与TensorBoard完全整合,不过PyTorch并没有提供所有的功能。