diff --git a/doc/fluid/advanced_guide/evaluation_debugging/debug/visualdl.md b/doc/fluid/advanced_guide/evaluation_debugging/debug/visualdl.md
index 77d1756eafe1a55e8b470543398a02e05fc0b109..df0149674045239242735bad0c778d74f9d17811 100644
--- a/doc/fluid/advanced_guide/evaluation_debugging/debug/visualdl.md
+++ b/doc/fluid/advanced_guide/evaluation_debugging/debug/visualdl.md
@@ -1,4 +1,3 @@
-
# VisualDL 工具简介
@@ -8,14 +7,26 @@
-VisualDL是深度学习模型可视化分析工具,以丰富的图表呈现训练参数变化趋势、模型结构、数据样本、高维数据分布等。可帮助用户更清晰直观地理解深度学习模型训练过程及模型结构,进而实现高效的模型优化。
+VisualDL是飞桨可视化分析工具,以丰富的图表呈现训练参数变化趋势、模型结构、数据样本、直方图、PR曲线及高维数据分布。可帮助用户更清晰直观地理解深度学习模型训练过程及模型结构,进而实现高效的模型优化。
+
+具体功能使用方式请参见**VisualDL使用指南**。项目正处于高速迭代中,敬请期待新组件的加入。
-VisualDL提供丰富的可视化功能,支持实时训练参数分析、图结构、数据样本可视化及高维数据降维呈现等诸多功能。具体功能使用方式,请参见 **VisualDL 使用指南**。项目正处于高速迭代中,敬请期待新组件的加入。
+VisualDL支持浏览器种类:Chrome(81和83)、Safari 13、FireFox(77和78)、Edge(Chromium版)。
VisualDL原生支持python的使用, 通过在模型的Python配置中添加几行代码,便可为训练过程提供丰富的可视化支持。
+## 目录
+
+* [核心亮点](#核心亮点)
+* [安装方式](#安装方式)
+* [使用方式](#使用方式)
+* [可视化功能概览](#可视化功能概览)
+* [开源贡献](#开源贡献)
+* [更多细节](#更多细节)
+* [技术交流](#技术交流)
+
## 核心亮点
@@ -26,7 +37,7 @@ API设计简洁易懂,使用简单。模型结构一键实现可视化。
### 功能丰富
-功能覆盖训练参数、图结构、数据样本及数据降维可视化。
+功能覆盖标量、数据样本、图结构、直方图、PR曲线及数据降维可视化。
### 高兼容性
@@ -40,13 +51,23 @@ API设计简洁易懂,使用简单。模型结构一键实现可视化。
## 安装方式
-使用pip安装 VisualDL 运行范例:
+### 使用pip安装
```shell
-pip install --upgrade visualdl==2.0.0a2
+pip install --upgrade --pre visualdl
```
+### 使用代码安装
+```
+git clone https://github.com/PaddlePaddle/VisualDL.git
+cd VisualDL
+
+python setup.py bdist_wheel
+pip install --upgrade dist/visualdl-*.whl
+```
+
+需要注意,官方自2020年1月1日起不再维护Python2,为了保障代码可用性,VisualDL现仅支持Python3
## 使用方式
@@ -57,15 +78,13 @@ VisualDL将训练过程中的数据、参数等信息储存至日志文件中后
VisualDL的后端提供了Python SDK,可通过LogWriter定制一个日志记录器,接口如下:
```python
-class LogWriter(
- logdir=None,
+class LogWriter(logdir=None,
comment='',
max_queue=10,
flush_secs=120,
filename_suffix='',
write_to_disk=True,
- **kwargs
- )
+ **kwargs)
```
#### 接口参数
@@ -103,16 +122,21 @@ with LogWriter(logdir="./log/scalar_test/train") as writer:
使用命令行启动VisualDL面板,命令格式如下:
```python
-visualdl --logdir
-
+
@@ -191,6 +226,56 @@ app.run(logdir="./log")
+
+
+
+
+
+
+
+
+
+
-
+
+
+
@@ -83,6 +140,8 @@ visualdl --logdir ./log --port 8080
+
+
* 可搜索卡片标签,展示目标图像
@@ -91,6 +150,8 @@ visualdl --logdir ./log --port 8080
+
+
* 可搜索打点数据标签,展示特定数据
@@ -98,6 +159,8 @@ visualdl --logdir ./log --port 8080
@@ -114,6 +179,8 @@ visualdl --logdir ./log --port 8080
-
+
@@ -191,6 +268,442 @@ visualdl --logdir ./log --port 8080
+ + +## Audio--音频播放组件 + +### 介绍 + +Audio组件实时查看训练过程中的音频数据,监控语音识别与合成等任务的训练过程。 + +### 记录接口 + +Audio 组件的记录接口如下: + +```python +add_audio(tag, audio_array, step, sample_rate) +``` + +接口参数说明如下: + +| 参数 | 格式 | 含义 | +| ----------- | ------------- | ------------------------------------------ | +| tag | string | 记录指标的标志,如`audio_tag`,不能含有`%` | +| audio_arry | numpy.ndarray | 以ndarray格式表示的音频 | +| step | int | 记录的步数 | +| sample_rate | int | 采样率,**注意正确填写对应音频的原采样率** | + +### Demo + +下面展示了使用 Audio 组件记录数据的示例,代码文件请见[Audio组件](https://github.com/PaddlePaddle/VisualDL/blob/develop/demo/components/audio_test.py) + +```python +from visualdl import LogWriter +import numpy as np +import wave + + +def read_audio_data(audio_path): + """ + Get audio data. + """ + CHUNK = 4096 + f = wave.open(audio_path, "rb") + wavdata = [] + chunk = f.readframes(CHUNK) + while chunk: + data = np.frombuffer(chunk, dtype='uint8') + wavdata.extend(data) + chunk = f.readframes(CHUNK) + # 8k sample rate, 16bit frame, 1 channel + shape = [8000, 2, 1] + return shape, wavdata + + +if __name__ == '__main__': + with LogWriter(logdir="./log") as writer: + audio_shape, audio_data = read_audio_data("./testing.wav") + audio_data = np.array(audio_data) + writer.add_audio(tag="audio_tag", + audio_array=audio_data, + step=0, + sample_rate=8000) +``` + +运行上述程序后,在命令行执行 + +```shell +visualdl --logdir ./log --port 8080 +``` + +在浏览器输入`http://127.0.0.1:8080`,即可查看音频数据。 + ++ +
+ + + +### 功能操作说明 + +- 可搜索音频标签显示对应音频数据 + ++ +
+ + + +- 支持滑动Step/迭代次数试听不同迭代次数下的音频数据 + ++ +
+ + + +- 支持播放/暂停音频数据 + ++ +
+ + + +- 支持音量调节 + ++ +
+ + + +- 支持音频下载 + ++ +
+ + + + +## Graph--网络结构组件 + +### 介绍 + +Graph组件一键可视化模型的网络结构。用于查看模型属性、节点信息、节点输入输出等,并进行节点搜索,协助开发者们快速分析模型结构与了解数据流向。 + +### Demo + +共有两种启动方式: + +- 前端模型文件拖拽上传: + + - 如只需使用Graph组件,则无需添加任何参数,在命令行执行`visualdl`后即可启动面板进行上传。 + - 如果同时需使用其他功能,在命令行指定日志文件路径(以`./log`为例)即可启动面板进行上传: + + ```shell + visualdl --logdir ./log --port 8080 + ``` + ++ +
+ + + +- 后端启动Graph: + + - 在命令行加入参数`--model`并指定**模型文件**路径(非文件夹路径),即可启动并查看网络结构可视化: + + ```shell + visualdl --model ./log/model --port 8080 + ``` + ++ +
+ + + +### 功能操作说明 + +- 一键上传模型 + - 支持模型格式: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 + ++ +
+ + + +- 支持上下左右任意拖拽模型、放大和缩小模型 + ++ +
+ + + +- 搜索定位到对应节点 + ++ +
+ + + +- 点击查看模型属性 + ++ +
+ + + ++ +
+ + + +- 支持选择模型展示的信息 + ++ +
+ + + +- 支持以PNG、SVG格式导出模型结构图 + ++ +
+ + + +- 点击节点即可展示对应属性信息 + ++ +
+ + + +- 支持一键更换模型 + ++ +
+ + + +## Histogram--直方图组件 + +### 介绍 + +Histogram组件以直方图形式展示Tensor(weight、bias、gradient等)数据在训练过程中的变化趋势。深入了解模型各层效果,帮助开发者精准调整模型结构。 + +### 记录接口 + +Histogram 组件的记录接口如下: + +```python +add_histogram(tag, values, step, walltime=None, buckets=10) +``` + +接口参数说明如下: + +| 参数 | 格式 | 含义 | +| -------- | --------------------- | ------------------------------------------- | +| tag | string | 记录指标的标志,如`train/loss`,不能含有`%` | +| values | numpy.ndarray or list | 以ndarray或list格式表示的数据 | +| step | int | 记录的步数 | +| walltime | int | 记录数据的时间戳,默认为当前时间戳 | +| buckets | int | 生成直方图的分段数,默认为10 | + +### Demo + +下面展示了使用 Histogram组件记录数据的示例,代码文件请见[Histogram组件](https://github.com/PaddlePaddle/VisualDL/blob/develop/demo/components/histogram_test.py) + +```python +from visualdl import LogWriter +import numpy as np + + +if __name__ == '__main__': + values = np.arange(0, 1000) + with LogWriter(logdir="./log/histogram_test/train") as writer: + for index in range(1, 101): + interval_start = 1 + 2 * index / 100.0 + interval_end = 6 - 2 * index / 100.0 + data = np.random.uniform(interval_start, interval_end, size=(10000)) + writer.add_histogram(tag='default tag', + values=data, + step=index, + buckets=10) +``` + +运行上述程序后,在命令行执行 + +```shell +visualdl --logdir ./log --port 8080 +``` + +在浏览器输入`http://127.0.0.1:8080`,即可查看训练参数直方图。 + +### 功能操作说明 + +- 支持数据卡片「最大化」、直方图「下载」 + ++ +
+ +- 可选择Offset或Overlay模式 + ++ +
+ + + - Offset模式 + ++ +
+ + + + - Overlay模式 + ++ +
+ + +- 数据点Hover展示参数值、训练步数、频次 + + - 在第240次训练步数时,权重为-0.0031,且出现的频次是2734次 + ++ +
+ +- 可搜索卡片标签,展示目标直方图 + ++ +
+ +- 可搜索打点数据标签,展示特定数据流 + ++ +
+ +## PR Curve--PR曲线组件 + +### 介绍 + +PR Curve以折线图形式呈现精度与召回率的权衡分析,清晰直观了解模型训练效果,便于分析模型是否达到理想标准。 + +### 记录接口 + +PR Curve组件的记录接口如下: + +```python +add_pr_curve(tag, labels, predictions, step=None, num_thresholds=10) +``` + +接口参数说明如下: + +| 参数 | 格式 | 含义 | +| -------------- | --------------------- | ------------------------------------------- | +| tag | string | 记录指标的标志,如`train/loss`,不能含有`%` | +| labels | numpy.ndarray or list | 以ndarray或list格式表示的实际类别 | +| predictions | numpy.ndarray or list | 以ndarray或list格式表示的预测类别 | +| step | int | 记录的步数 | +| num_thresholds | int | 阈值设置的个数,默认为10,最大值为127 | + +### Demo + +下面展示了使用 PR Curve 组件记录数据的示例,代码文件请见[PR Curve组件](#https://github.com/PaddlePaddle/VisualDL/blob/develop/demo/components/pr_curve_test.py) + +```python +from visualdl import LogWriter +import numpy as np + +with LogWriter("./log/pr_curve_test/train") as writer: + for step in range(3): + labels = np.random.randint(2, size=100) + predictions = np.random.rand(100) + writer.add_pr_curve(tag='pr_curve', + labels=labels, + predictions=predictions, + step=step, + num_thresholds=5) +``` + +运行上述程序后,在命令行执行 + +```shell +visualdl --logdir ./log --port 8080 +``` + +接着在浏览器打开`http://127.0.0.1:8080`,即可查看PR Curve + ++ +
+ + + +### 功能操作说明 + +- 支持数据卡片「最大化」,「还原」、「下载」PR曲线 + ++ +
+ +- 数据点Hover展示详细信息:阈值对应的TP、TN、FP、FN + ++ +
+ +- 可搜索卡片标签,展示目标图表 + ++ +
+ +- 可搜索打点数据标签,展示特定数据 + ++ +
+ + +- 支持查看不同训练步数下的PR曲线 + ++ +
+ +- X轴-时间显示类型有三种衡量尺度 + + - Step:迭代次数 + - Walltime:训练绝对时间 + - Relative:训练时长 + ++ +
+ ## High Dimensional -- 数据降维组件 ### 介绍 @@ -207,16 +720,20 @@ High Dimensional 组件的记录接口如下: ```python add_embeddings(tag, labels, hot_vectors, walltime=None) ``` + 接口参数说明如下: -|参数|格式|含义| -|-|-|-| -|tag|string|记录指标的标志,如`default`,不能含有`%`| -|labels|numpy.array 或 list|一维数组表示的标签,每个元素是一个string类型的字符串| -|hot_vectors|numpy.array or list|与labels一一对应,每个元素可以看作是某个标签的特征| -|walltime|int|记录数据的时间戳,默认为当前时间戳| + +| 参数 | 格式 | 含义 | +| ----------- | ------------------- | ---------------------------------------------------- | +| tag | string | 记录指标的标志,如`default`,不能含有`%` | +| labels | numpy.array 或 list | 一维数组表示的标签,每个元素是一个string类型的字符串 | +| hot_vectors | numpy.array or list | 与labels一一对应,每个元素可以看作是某个标签的特征 | +| walltime | int | 记录数据的时间戳,默认为当前时间戳 | ### Demo -下面展示了使用 High Dimensional 组件记录数据的示例,代码见[High Dimensional组件](../../demo/components/high_dimensional_test.py) + +下面展示了使用 High Dimensional 组件记录数据的示例,代码文件请见[High Dimensional组件](https://github.com/PaddlePaddle/VisualDL/blob/develop/demo/components/high_dimensional_test.py) + ```python from visualdl import LogWriter @@ -237,7 +754,9 @@ if __name__ == '__main__': labels=labels, hot_vectors=hot_vectors) ``` + 运行上述程序后,在命令行执行 + ```shell visualdl --logdir ./log --port 8080 ``` @@ -245,5 +764,11 @@ visualdl --logdir ./log --port 8080 接着在浏览器打开`http://127.0.0.1:8080`,即可查看降维后的可视化数据。- +
+ + + + + +#