VisualDL 使用指南

概述

VisualDL 是一个面向深度学习任务设计的可视化工具。VisualDL 利用了丰富的图表来展示数据,用户可以更直观、清晰地查看数据的特征与变化趋势,有助于分析数据、及时发现错误,进而改进神经网络模型的设计。

目前,VisualDL 支持 scalar, image, audio, graph, histogram, pr curve, high dimensional 七个组件,项目正处于高速迭代中,敬请期待新组件的加入。

组件名称展示图表作用
Scalar折线图动态展示损失函数值、准确率等标量数据
Image图片可视化显示图片,可显示输入图片和处理后的结果,便于查看中间过程的变化
Audio音频播放播放训练过程中的音频数据,监控语音识别与合成等任务的训练过程
Graph网络结构展示网络结构、节点属性及数据流向,辅助学习、优化网络结构
Histogram直方图展示训练过程中权重、梯度等张量的分布
PR Curve折线图权衡精度与召回率之间的平衡关系,便于选择最佳阈值
High Dimensional数据降维将高维数据映射到 2D/3D 空间来可视化嵌入,便于观察不同数据的相关性

Scalar — 折线图组件

介绍

Scalar 组件的输入数据类型为标量,该组件的作用是将训练参数以折线图形式呈现。将损失函数值、准确率等标量数据作为参数传入 scalar 组件,即可画出折线图,便于观察变化趋势。

记录接口

Scalar 组件的记录接口如下:

  1. add_scalar(tag, value, step, walltime=None)

接口参数说明如下:

参数格式含义
tagstring记录指标的标志,如train/loss,不能含有%
valuefloat要记录的数据值
stepint记录的步数
walltimeint记录数据的时间戳,默认为当前时间戳

Demo

  • 基础使用

下面展示了使用 Scalar 组件记录数据的示例,代码文件请见Scalar组件

  1. from visualdl import LogWriter
  2. if __name__ == '__main__':
  3. value = [i/1000.0 for i in range(1000)]
  4. # 初始化一个记录器
  5. with LogWriter(logdir="./log/scalar_test/train") as writer:
  6. for step in range(1000):
  7. # 向记录器添加一个tag为`acc`的数据
  8. writer.add_scalar(tag="acc", step=step, value=value[step])
  9. # 向记录器添加一个tag为`loss`的数据
  10. writer.add_scalar(tag="loss", step=step, value=1/(value[step] + 1))

运行上述程序后,在命令行执行

  1. visualdl --logdir ./log --port 8080

接着在浏览器打开http://127.0.0.1:8080,即可查看以下折线图。

VisualDL 使用指南 - 图1

  • 多组实验对比

下面展示了使用Scalar组件实现多组实验对比

多组实验对比的实现分为两步:

  1. 创建子日志文件储存每组实验的参数数据

  2. 将数据写入scalar组件时,使用相同的tag,即可实现对比不同实验同一类型参数

  1. from visualdl import LogWriter
  2. if __name__ == '__main__':
  3. value = [i/1000.0 for i in range(1000)]
  4. # 步骤一:创建父文件夹:log与子文件夹:scalar_test
  5. with LogWriter(logdir="./log/scalar_test") as writer:
  6. for step in range(1000):
  7. # 步骤二:向记录器添加一个tag为`train/acc`的数据
  8. writer.add_scalar(tag="train/acc", step=step, value=value[step])
  9. # 步骤二:向记录器添加一个tag为`train/loss`的数据
  10. writer.add_scalar(tag="train/loss", step=step, value=1/(value[step] + 1))
  11. # 步骤一:创建第二个子文件夹scalar_test2
  12. value = [i/500.0 for i in range(1000)]
  13. with LogWriter(logdir="./log/scalar_test2") as writer:
  14. for step in range(1000):
  15. # 步骤二:在同样名为`train/acc`下添加scalar_test2的accuracy的数据
  16. writer.add_scalar(tag="train/acc", step=step, value=value[step])
  17. # 步骤二:在同样名为`train/loss`下添加scalar_test2的loss的数据
  18. writer.add_scalar(tag="train/loss", step=step, value=1/(value[step] + 1))

运行上述程序后,在命令行执行

  1. visualdl --logdir ./log --port 8080

接着在浏览器打开http://127.0.0.1:8080,即可查看以下折线图,对比「scalar_test」和「scalar_test2」的Accuracy和Loss。

VisualDL 使用指南 - 图2

*多组实验对比的应用案例可参考AI Studio项目:VisualDL 2.0—眼疾识别训练可视化

功能操作说明

  • 支持数据卡片「最大化」、「还原」、「坐标系转化」(y轴对数坐标)、「下载」折线图

VisualDL 使用指南 - 图3

  • 数据点Hover展示详细信息

VisualDL 使用指南 - 图4

  • 可搜索卡片标签,展示目标图像

VisualDL 使用指南 - 图5

  • 可搜索打点数据标签,展示特定数据

VisualDL 使用指南 - 图6

  • X轴有三种衡量尺度
  1. Step:迭代次数

  2. Walltime:训练绝对时间

  3. Relative:训练时长

VisualDL 使用指南 - 图7

  • 可调整曲线平滑度,以便更好的展现参数整体的变化趋势

VisualDL 使用指南 - 图8

Image — 图片可视化组件

介绍

Image 组件用于显示图片数据随训练的变化。在模型训练过程中,将图片数据传入 Image 组件,就可在 VisualDL 的前端网页查看相应图片。

记录接口

Image 组件的记录接口如下:

  1. add_image(tag, img, step, walltime=None)

接口参数说明如下:

参数格式含义
tagstring记录指标的标志,如train/loss,不能含有%
imgnumpy.ndarray以ndarray格式表示的图片
stepint记录的步数
walltimeint记录数据的时间戳,默认为当前时间戳

Demo

下面展示了使用 Image 组件记录数据的示例,代码文件请见Image组件

  1. import numpy as np
  2. from PIL import Image
  3. from visualdl import LogWriter
  4. def random_crop(img):
  5. """获取图片的随机 100x100 分片
  6. """
  7. img = Image.open(img)
  8. w, h = img.size
  9. random_w = np.random.randint(0, w - 100)
  10. random_h = np.random.randint(0, h - 100)
  11. r = img.crop((random_w, random_h, random_w + 100, random_h + 100))
  12. return np.asarray(r)
  13. if __name__ == '__main__':
  14. # 初始化一个记录器
  15. with LogWriter(logdir="./log/image_test/train") as writer:
  16. for step in range(6):
  17. # 添加一个图片数据
  18. writer.add_image(tag="eye",
  19. img=random_crop("../../docs/images/eye.jpg"),
  20. step=step)

运行上述程序后,在命令行执行

  1. visualdl --logdir ./log --port 8080

在浏览器输入http://127.0.0.1:8080,即可查看图片数据。

VisualDL 使用指南 - 图9

功能操作说明

可搜索图片标签显示对应图片数据

VisualDL 使用指南 - 图10

支持滑动Step/迭代次数查看不同迭代次数下的图片数据

VisualDL 使用指南 - 图11

Audio—音频播放组件

介绍

Audio组件实时查看训练过程中的音频数据,监控语音识别与合成等任务的训练过程。

记录接口

Audio 组件的记录接口如下:

  1. add_audio(tag, audio_array, step, sample_rate)

接口参数说明如下:

参数格式含义
tagstring记录指标的标志,如audio_tag,不能含有%
audio_arrynumpy.ndarray以ndarray格式表示的音频
stepint记录的步数
sample_rateint采样率,注意正确填写对应音频的原采样率

Demo

下面展示了使用 Audio 组件记录数据的示例,代码文件请见Audio组件

  1. from visualdl import LogWriter
  2. import numpy as np
  3. import wave
  4. def read_audio_data(audio_path):
  5. """
  6. Get audio data.
  7. """
  8. CHUNK = 4096
  9. f = wave.open(audio_path, "rb")
  10. wavdata = []
  11. chunk = f.readframes(CHUNK)
  12. while chunk:
  13. data = np.frombuffer(chunk, dtype='uint8')
  14. wavdata.extend(data)
  15. chunk = f.readframes(CHUNK)
  16. # 8k sample rate, 16bit frame, 1 channel
  17. shape = [8000, 2, 1]
  18. return shape, wavdata
  19. if __name__ == '__main__':
  20. with LogWriter(logdir="./log") as writer:
  21. audio_shape, audio_data = read_audio_data("./testing.wav")
  22. audio_data = np.array(audio_data)
  23. writer.add_audio(tag="audio_tag",
  24. audio_array=audio_data,
  25. step=0,
  26. sample_rate=8000)

运行上述程序后,在命令行执行

  1. visualdl --logdir ./log --port 8080

在浏览器输入http://127.0.0.1:8080,即可查看音频数据。

VisualDL 使用指南 - 图12

功能操作说明

  • 可搜索音频标签显示对应音频数据

VisualDL 使用指南 - 图13

  • 支持滑动Step/迭代次数试听不同迭代次数下的音频数据

VisualDL 使用指南 - 图14

  • 支持播放/暂停音频数据

VisualDL 使用指南 - 图15

  • 支持音量调节

VisualDL 使用指南 - 图16

  • 支持音频下载

VisualDL 使用指南 - 图17

Graph—网络结构组件

介绍

Graph组件一键可视化模型的网络结构。用于查看模型属性、节点信息、节点输入输出等,并进行节点搜索,协助开发者们快速分析模型结构与了解数据流向。

Demo

共有两种启动方式:

  • 前端模型文件拖拽上传:

    • 如只需使用Graph组件,则无需添加任何参数,在命令行执行visualdl后即可启动面板进行上传。

    • 如果同时需使用其他功能,在命令行指定日志文件路径(以./log为例)即可启动面板进行上传:

    1. visualdl --logdir ./log --port 8080

VisualDL 使用指南 - 图18

  • 后端启动Graph:

    • 在命令行加入参数--model并指定模型文件路径(非文件夹路径),即可启动并查看网络结构可视化:
    1. visualdl --model ./log/model --port 8080

VisualDL 使用指南 - 图19

功能操作说明

  • 一键上传模型

    • 支持模型格式:PaddlePaddle、ONNX、Keras、Core ML、Caffe、Caffe2、Darknet、MXNet、ncnn、TensorFlow Lite

    • 实验性支持模型格式:TorchScript、PyTorch、Torch、 ArmNN、BigDL、Chainer、CNTK、Deeplearning4j、MediaPipe、ML.NET、MNN、OpenVINO、Scikit-learn、Tengine、TensorFlow.js、TensorFlow

VisualDL 使用指南 - 图20

  • 支持上下左右任意拖拽模型、放大和缩小模型

VisualDL 使用指南 - 图21

  • 搜索定位到对应节点

VisualDL 使用指南 - 图22

  • 点击查看模型属性

VisualDL 使用指南 - 图23

VisualDL 使用指南 - 图24

  • 支持选择模型展示的信息

VisualDL 使用指南 - 图25

  • 支持以PNG、SVG格式导出模型结构图

VisualDL 使用指南 - 图26

  • 点击节点即可展示对应属性信息

VisualDL 使用指南 - 图27

  • 支持一键更换模型

VisualDL 使用指南 - 图28

Histogram—直方图组件

介绍

Histogram组件以直方图形式展示Tensor(weight、bias、gradient等)数据在训练过程中的变化趋势。深入了解模型各层效果,帮助开发者精准调整模型结构。

记录接口

Histogram 组件的记录接口如下:

  1. add_histogram(tag, values, step, walltime=None, buckets=10)

接口参数说明如下:

参数格式含义
tagstring记录指标的标志,如train/loss,不能含有%
valuesnumpy.ndarray or list以ndarray或list格式表示的数据
stepint记录的步数
walltimeint记录数据的时间戳,默认为当前时间戳
bucketsint生成直方图的分段数,默认为10

Demo

下面展示了使用 Histogram组件记录数据的示例,代码文件请见Histogram组件

  1. from visualdl import LogWriter
  2. import numpy as np
  3. if __name__ == '__main__':
  4. values = np.arange(0, 1000)
  5. with LogWriter(logdir="./log/histogram_test/train") as writer:
  6. for index in range(1, 101):
  7. interval_start = 1 + 2 * index / 100.0
  8. interval_end = 6 - 2 * index / 100.0
  9. data = np.random.uniform(interval_start, interval_end, size=(10000))
  10. writer.add_histogram(tag='default tag',
  11. values=data,
  12. step=index,
  13. buckets=10)

运行上述程序后,在命令行执行

  1. visualdl --logdir ./log --port 8080

在浏览器输入http://127.0.0.1:8080,即可查看训练参数直方图。

功能操作说明

  • 支持数据卡片「最大化」、直方图「下载」

    VisualDL 使用指南 - 图29

  • 可选择Offset或Overlay模式

    VisualDL 使用指南 - 图30

    • Offset模式

    VisualDL 使用指南 - 图31

    • Overlay模式

    VisualDL 使用指南 - 图32

  • 数据点Hover展示参数值、训练步数、频次

    • 在第240次训练步数时,权重为-0.0031,且出现的频次是2734次

    VisualDL 使用指南 - 图33

  • 可搜索卡片标签,展示目标直方图

    VisualDL 使用指南 - 图34

  • 可搜索打点数据标签,展示特定数据流

    VisualDL 使用指南 - 图35

PR Curve—PR曲线组件

介绍

PR Curve以折线图形式呈现精度与召回率的权衡分析,清晰直观了解模型训练效果,便于分析模型是否达到理想标准。

记录接口

PR Curve组件的记录接口如下:

  1. add_pr_curve(tag, labels, predictions, step=None, num_thresholds=10)

接口参数说明如下:

参数格式含义
tagstring记录指标的标志,如train/loss,不能含有%
labelsnumpy.ndarray or list以ndarray或list格式表示的实际类别
predictionsnumpy.ndarray or list以ndarray或list格式表示的预测类别
stepint记录的步数
num_thresholdsint阈值设置的个数,默认为10,最大值为127

Demo

下面展示了使用 PR Curve 组件记录数据的示例,代码文件请见PR Curve组件

  1. from visualdl import LogWriter
  2. import numpy as np
  3. with LogWriter("./log/pr_curve_test/train") as writer:
  4. for step in range(3):
  5. labels = np.random.randint(2, size=100)
  6. predictions = np.random.rand(100)
  7. writer.add_pr_curve(tag='pr_curve',
  8. labels=labels,
  9. predictions=predictions,
  10. step=step,
  11. num_thresholds=5)

运行上述程序后,在命令行执行

  1. visualdl --logdir ./log --port 8080

接着在浏览器打开http://127.0.0.1:8080,即可查看PR Curve

VisualDL 使用指南 - 图36

功能操作说明

  • 支持数据卡片「最大化」,「还原」、「下载」PR曲线

    VisualDL 使用指南 - 图37

  • 数据点Hover展示详细信息:阈值对应的TP、TN、FP、FN

    VisualDL 使用指南 - 图38

  • 可搜索卡片标签,展示目标图表

    VisualDL 使用指南 - 图39

  • 可搜索打点数据标签,展示特定数据

    VisualDL 使用指南 - 图40

  • 支持查看不同训练步数下的PR曲线

    VisualDL 使用指南 - 图41

  • X轴-时间显示类型有三种衡量尺度

    • Step:迭代次数

    • Walltime:训练绝对时间

    • Relative:训练时长

    VisualDL 使用指南 - 图42

High Dimensional — 数据降维组件

介绍

High Dimensional 组件将高维数据进行降维展示,用于深入分析高维数据间的关系。目前支持以下两种降维算法:

  • PCA : Principle Component Analysis 主成分分析

  • t-SNE : t-distributed stochastic neighbor embedding t-分布式随机领域嵌入

记录接口

High Dimensional 组件的记录接口如下:

  1. add_embeddings(tag, labels, hot_vectors, walltime=None)

接口参数说明如下:

参数格式含义
tagstring记录指标的标志,如default,不能含有%
labelsnumpy.array 或 list一维数组表示的标签,每个元素是一个string类型的字符串
hot_vectorsnumpy.array or list与labels一一对应,每个元素可以看作是某个标签的特征
walltimeint记录数据的时间戳,默认为当前时间戳

Demo

下面展示了使用 High Dimensional 组件记录数据的示例,代码文件请见High Dimensional组件

  1. from visualdl import LogWriter
  2. if __name__ == '__main__':
  3. hot_vectors = [
  4. [1.3561076367500755, 1.3116267195134017, 1.6785401875616097],
  5. [1.1039614644440658, 1.8891609992484688, 1.32030488587171],
  6. [1.9924524852447711, 1.9358920727142739, 1.2124401279391606],
  7. [1.4129542689796446, 1.7372166387197474, 1.7317806077076527],
  8. [1.3913371800587777, 1.4684674577930312, 1.5214136352476377]]
  9. labels = ["label_1", "label_2", "label_3", "label_4", "label_5"]
  10. # 初始化一个记录器
  11. with LogWriter(logdir="./log/high_dimensional_test/train") as writer:
  12. # 将一组labels和对应的hot_vectors传入记录器进行记录
  13. writer.add_embeddings(tag='default',
  14. labels=labels,
  15. hot_vectors=hot_vectors)

运行上述程序后,在命令行执行

  1. visualdl --logdir ./log --port 8080

接着在浏览器打开http://127.0.0.1:8080,即可查看降维后的可视化数据。

VisualDL 使用指南 - 图43