diff --git a/doc/fluid/user_guides/howto/evaluation_and_debugging/debug/visualdl.md b/doc/fluid/user_guides/howto/evaluation_and_debugging/debug/visualdl.md index 5ae22e349d693a3b87df47247a07215d5e6c49cc..08286ced3ca54257e5c81ab4161f839cec6c627c 100644 --- a/doc/fluid/user_guides/howto/evaluation_and_debugging/debug/visualdl.md +++ b/doc/fluid/user_guides/howto/evaluation_and_debugging/debug/visualdl.md @@ -1,249 +1,284 @@ # VisualDL 工具简介 + +
- +
-## 介绍 -VisualDL是一个面向深度学习任务设计的可视化工具,包含了scalar、参数分布、模型结构、图像可视化等功能,项目正处于高速迭代中,新的组件会不断加入。 -目前大多数DNN平台均使用Python作为配置语言,VisualDL原生支持python的使用, -通过在模型的Python配置中添加几行,便可以为训练过程提供丰富的可视化支持。 +VisualDL是飞桨可视化分析工具,以丰富的图表呈现训练参数变化趋势、模型结构、数据样本、直方图、PR曲线及高维数据分布。可帮助用户更清晰直观地理解深度学习模型训练过程及模型结构,进而实现高效的模型优化。 -除了Python SDK之外,VisualDL底层采用C++编写,其暴露的C++ SDK也可以集成到其他平台中, -实现原生的性能和定制效果。 +具体功能使用方式请参见**VisualDL使用指南**。项目正处于高速迭代中,敬请期待新组件的加入。 -## 组件 -VisualDL 目前支持以下组件: +VisualDL支持浏览器种类:Chrome(81和83)、Safari 13、FireFox(77和78)、Edge(Chromium版)。 -- scalar -- histogram -- image -- audio -- graph -- high dimensional +VisualDL原生支持python的使用, 通过在模型的Python配置中添加几行代码,便可为训练过程提供丰富的可视化支持。 -### Scalar -可以用于展示训练测试的误差趋势 -- -
-### Histogram +## 目录 -用于可视化任何tensor中元素分布的变化趋势 +* [核心亮点](#核心亮点) +* [安装方式](#安装方式) +* [使用方式](#使用方式) +* [可视化功能概览](#可视化功能概览) +* [开源贡献](#开源贡献) +* [更多细节](#更多细节) +* [技术交流](#技术交流) -- -
-### Image -可以用于可视化任何tensor,或模型生成的图片 -- -
+## 核心亮点 -### Audio -可用于播放输入或生成的音频样本 +### 简单易用 -### Graph +API设计简洁易懂,使用简单。模型结构一键实现可视化。 -VisualDL的graph支持paddle program的展示,同时兼容 ONNX(Open Neural Network Exchange)[https://github.com/onnx/onnx],通过与 python SDK的结合,VisualDL可以兼容包括 PaddlePaddle, pytorch, mxnet在内的大部分主流DNN平台。 +### 功能丰富 -- -
+功能覆盖标量、数据样本、图结构、直方图、PR曲线及数据降维可视化。 -要进行paddle模型的展示,需要进行以下两步操作: +### 高兼容性 -1. 在paddle代码中,调用`fluid.io.save_inference_model()`接口保存模型 -2. 在命令行界面,使用`visualdl --model_pb [paddle_model_dir]` 加载paddle模型 +全面支持Paddle、ONNX、Caffe等市面主流模型结构可视化,广泛支持各类用户进行可视化分析。 +### 全面支持 -### High Dimensional -用高维度数据映射在2D/3D来可视化嵌入 +与飞桨服务平台及工具组件全面打通,为您在飞桨生态系统中提供最佳使用体验。 -- -
-## 快速尝试 -请使用下面的命令,来快速测试 VisualDL。 +## 安装方式 + +### 使用pip安装 + +```shell +pip install --upgrade --pre visualdl ``` -# 安装,建議是在虚拟环境或anaconda下。 -pip install --upgrade visualdl -# 运行一个例子,vdl_create_scratch_log 将创建测试日志 -vdl_create_scratch_log -visualdl --logdir=scratch_log --port=8080 +### 使用代码安装 -# 访问 http://127.0.0.1:8080 ``` +git clone https://github.com/PaddlePaddle/VisualDL.git +cd VisualDL -如果出现`TypeError: __init__() got an unexpected keyword argument 'file'`, 是因为protobuf不是3.5以上,运行`pip install --upgrade protobuf`就能解决。 +python setup.py bdist_wheel +pip install --upgrade dist/visualdl-*.whl +``` +需要注意,官方自2020年1月1日起不再维护Python2,为了保障代码可用性,VisualDL现仅支持Python3 -如果以上步骤还有出现其他问题,很可能是因为python或pip不同版本或不同位置所致,以下安装方法能解决。 +## 使用方式 -## 使用 virtualenv 安装 +VisualDL将训练过程中的数据、参数等信息储存至日志文件中后,启动面板即可查看可视化结果。 -[Virtualenv](https://virtualenv.pypa.io/en/stable/) 能创建独立Python环境,也能确保Python和pip的相对位置正确。 +### 1. 记录日志 -在macOS上,安装pip和virtualenv如下: -``` -sudo easy_install pip -pip install --upgrade virtualenv -``` +VisualDL的后端提供了Python SDK,可通过LogWriter定制一个日志记录器,接口如下: -在Linux上,安装pip和virtualenv如下: -``` -sudo apt-get install python3-pip python3-dev python-virtualenv +```python +class LogWriter(logdir=None, + comment='', + max_queue=10, + flush_secs=120, + filename_suffix='', + write_to_disk=True, + **kwargs) ``` -然后创建一个虚拟环境: +#### 接口参数 + +| 参数 | 格式 | 含义 | +| --------------- | ------- | ------------------------------------------------------------ | +| logdir | string | 日志文件所在的路径,VisualDL将在此路径下建立日志文件并进行记录,如果不填则默认为`runs/${CURRENT_TIME}` | +| comment | string | 为日志文件夹名添加后缀,如果制定了logdir则此项无效 | +| max_queue | int | 日志记录消息队列的最大容量,达到此容量则立即写入到日志文件 | +| flush_secs | int | 日志记录消息队列的最大缓存时间,达到此时间则立即写入到日志文件 | +| filename_suffix | string | 为默认的日志文件名添加后缀 | +| write_to_disk | boolean | 是否写入到磁盘 | + +#### 示例 + +设置日志文件并记录标量数据: + +```python +from visualdl import LogWriter + +# 在`./log/scalar_test/train`路径下建立日志文件 +with LogWriter(logdir="./log/scalar_test/train") as writer: + # 使用scalar组件记录一个标量数据 + writer.add_scalar(tag="acc", step=1, value=0.5678) + writer.add_scalar(tag="acc", step=2, value=0.6878) + writer.add_scalar(tag="acc", step=3, value=0.9878) ``` -virtualenv ~/vdl # for Python2.7 -virtualenv -p python3 ~/vdl for Python 3.x + +### 2. 启动面板 + +在上述示例中,日志已记录三组标量数据,现可启动VisualDL面板查看日志的可视化结果,共有两种启动方式: + +#### 在命令行启动 + +使用命令行启动VisualDL面板,命令格式如下: + +```python +visualdl --logdir+ +
-## 使用 Anaconda 安装 -Anaconda是一个用于科学计算的Python发行版,提供了包管理与环境管理的功能,可以很方便地解决多版本python并存、切换以及各种第三方包安装问题。 +## 可视化功能概览 -请根据[Anaconda下载网站](https://www.anaconda.com/download) 的指示去下载和安装Anaconda. -下载Python 3.6版本的command-Line installer. +### Scalar +以图表形式实时展示训练过程参数,如loss、accuracy。让用户通过观察单组或多组训练参数变化,了解训练过程,加速模型调优。具有两大特点: -创建conda环境名字为```vdl```或任何名字: -``` -conda create -n vdl pip python=2.7 # or python=3.3, etc. -``` +#### 动态展示 -激活conda环境如下: -``` -source activate vdl -``` +在启动VisualDL后,LogReader将不断增量的读取日志中数据并供前端调用展示,因此能够在训练中同步观测指标变化,如下图: -现在再安装 VisualDL 和运行范例: ++ +
-``` -pip install --upgrade visualdl -# 运行一个例子,vdl_create_scratch_log 将创建测试日志 -vdl_create_scratch_log -visualdl --logdir=scratch_log --port=8080 +#### 多实验对比 -# 访问 http://127.0.0.1:8080 -``` +只需在启动VisualDL时将每个实验日志所在路径同时传入即可,每个实验中相同tag的指标将绘制在一张图中同步呈现,如下图: -如果仍然遇到安装问题,请尝试以下用源代码安装方法。 ++ +
-### 使用代码安装 -``` -#建議是在虚拟环境或anaconda下。 -git clone https://github.com/PaddlePaddle/VisualDL.git -cd VisualDL -python setup.py bdist_wheel -pip install --upgrade dist/visualdl-*.whl -``` +### Image +实时展示训练过程中的图像数据,用于观察不同训练阶段的图像变化,进而深入了解训练过程及效果。 + ++ +
-如果打包和安装遇到其他问题,不安装只想运行Visual DL可以看[这里](https://github.com/PaddlePaddle/VisualDL/blob/develop/docs/develop/how_to_dev_frontend_cn.md) +### Audio +实时查看训练过程中的音频数据,监控语音识别与合成等任务的训练过程。 -## SDK -VisualDL 同时提供了python SDK 和 C++ SDK 来实现不同方式的使用。 ++ +
-### Python SDK -VisualDL 现在支持 Python 2和 Python 3。 -以最简单的Scalar组件为例,尝试创建一个scalar组件并插入多个时间步的数据: +### Graph -```python -import random -from visualdl import LogWriter +一键可视化模型的网络结构。可查看模型属性、节点信息、节点输入输出等,并支持节点搜索,辅助用户快速分析模型结构与了解数据流向。 ++ +
-logdir = "./tmp" -logger = LogWriter(logdir, sync_cycle=10000) -# mark the components with 'train' label. -with logger.mode("train"): - # create a scalar component called 'scalars/scalar0' - scalar0 = logger.scalar("scalars/scalar0") +### Histogram -# add some records during DL model running. -for step in range(100): - scalar0.add_record(step, random.random()) -``` +以直方图形式展示Tensor(weight、bias、gradient等)数据在训练过程中的变化趋势。深入了解模型各层效果,帮助开发者精准调整模型结构。 -### C++ SDK -上面 Python SDK 中代码完全一致的C++ SDK用法如下 -```c++ -#include+ +
-int main() { - const std::string dir = "./tmp"; - vs::LogWriter logger(dir, 10000); - logger.SetMode("train"); - auto tablet = logger.AddTablet("scalars/scalar0"); +- Overlay模式 - cp::Scalar+ +
- for (int step = 0; step < 1000; step++) { - float v = (float)std::rand() / RAND_MAX; - scalar0.AddRecord(step, v); - } - return 0; -} -``` -## 启动Board -当训练过程中已经产生了日志数据,就可以启动board进行实时预览可视化信息 +### PR Curve -``` -visualdl --logdir+ +
+ +### High Dimensional -board 还支持一下参数来实现远程的访问: +将高维数据进行降维展示,目前支持T-SNE、PCA两种降维方式,用于深入分析高维数据间的关系,方便用户根据数据特征进行算法优化。 -- `--host` 设定IP -- `--port` 设定端口 -- `-m / --model_pb` 指定 ONNX 格式的模型文件 ++ +
+## 开源贡献 -### 贡献 +VisualDL 是由 [PaddlePaddle](https://www.paddlepaddle.org/) 和 [ECharts](https://echarts.apache.org/) 合作推出的开源项目。 +Graph 相关功能由 [Netron](https://github.com/lutzroeder/netron) 提供技术支持。 +欢迎所有人使用,提意见以及贡献代码。 -VisualDL 是由 [PaddlePaddle](http://www.paddlepaddle.org/) 和 -[ECharts](http://echarts.baidu.com/) 合作推出的开源项目。我们欢迎所有人使用,提意见以及贡献代码。 ## 更多细节 -想了解更多关于VisualDL的使用介绍,请查看[文档](https://github.com/PaddlePaddle/VisualDL/tree/develop/demo) +想了解更多关于VisualDL可视化功能的使用详情介绍,请查看**VisualDL使用指南**。 + +## 技术交流 +欢迎您加入VisualDL官方QQ群:1045783368 与飞桨团队以及其他用户共同针对VisualDL进行讨论与交流。 \ No newline at end of file diff --git a/doc/fluid/user_guides/howto/evaluation_and_debugging/debug/visualdl_usage.md b/doc/fluid/user_guides/howto/evaluation_and_debugging/debug/visualdl_usage.md index 07583e27f0af256fce8aaee7a5333039ecd6fd4b..17013e54be8f1103da791e3005314ee419989fad 100644 --- a/doc/fluid/user_guides/howto/evaluation_and_debugging/debug/visualdl_usage.md +++ b/doc/fluid/user_guides/howto/evaluation_and_debugging/debug/visualdl_usage.md @@ -1,622 +1,742 @@ -# VisualDL 使用指南 -## 概述 -VisualDL 是一个面向深度学习任务设计的可视化工具。VisualDL 利用了丰富的图表来展示数据,用户可以更直观、清晰地查看数据的特征与变化趋势,有助于分析数据、及时发现错误,进而改进神经网络模型的设计。 -目前,VisualDL 支持 scalar, histogram, image, text, audio, high dimensional, graph 这七个组件: +# VisualDL 使用指南 -|组件名称|展示图表|作用| -|:----:|:---:|:---| -|scalar|折线图|动态展示损失函数值、准确率等标量数据| -|histogram|直方图|动态展示参数矩阵的数值分布与变化趋势,便于查看权重矩阵、偏置项、梯度等参数的变化| -|image|图片|显示图片,可显示输入图片和处理后的结果,便于查看中间过程的变化| -|text|文本|展示文本,有助于 NLP 等领域的用户进行数据分析和结果判断| -|audio|音频|可直接播放音频,也支持下载,有助于语音识别等领域的用户进行数据分析和结果判断| -|high dimensional|坐标|将高维数据映射到 2D/3D 空间来可视化嵌入,便于观察不同数据的相关性| -|graph|有向图|展示神经网络的模型结构| +### 概述 -## 动态添加数据组件 +VisualDL 是一个面向深度学习任务设计的可视化工具。VisualDL 利用了丰富的图表来展示数据,用户可以更直观、清晰地查看数据的特征与变化趋势,有助于分析数据、及时发现错误,进而改进神经网络模型的设计。 -要想使用 VisualDL 的 scalar, histogram, image, text, audio, high dimensional 这六个组件来添加数据,都必须先初始化记录器 `LogWriter`,以设置数据在本地磁盘的保存路径以及同步周期。此后各个组件的输入数据会先保存到本地磁盘,进而才能加载到前端网页中展示。 +目前,VisualDL 支持 scalar, image, audio, graph, histogram, pr curve, high dimensional 七个组件,项目正处于高速迭代中,敬请期待新组件的加入。 -### LogWriter -- 记录器 +| 组件名称 | 展示图表 | 作用 | +| :-------------------------------------------------: | :--------: | :----------------------------------------------------------- | +| [ Scalar](#Scalar--标量组件) | 折线图 | 动态展示损失函数值、准确率等标量数据 | +| [Image](#Image--图片可视化组件) | 图片可视化 | 显示图片,可显示输入图片和处理后的结果,便于查看中间过程的变化 | +| [Audio](#Audio--音频播放组件) | 音频播放 | 播放训练过程中的音频数据,监控语音识别与合成等任务的训练过程 | +| [Graph](#Graph--网络结构组件) | 网络结构 | 展示网络结构、节点属性及数据流向,辅助学习、优化网络结构 | +| [Histogram](#Histogram--直方图组件) | 直方图 | 展示训练过程中权重、梯度等张量的分布 | +| [PR Curve](#PR-Curve--PR曲线组件) | 折线图 | 权衡精度与召回率之间的平衡关系,便于选择最佳阈值 | +| [High Dimensional](#High-Dimensional--数据降维组件) | 数据降维 | 将高维数据映射到 2D/3D 空间来可视化嵌入,便于观察不同数据的相关性 | -LogWriter 是一个数据记录器,在数据记录过程中,LogWriter 会周期性地将数据写入指定路径。 +## Scalar -- 折线图组件 -LogWriter 的定义为: +### 介绍 -```python -class LogWriter(dir, sync_cycle) -``` +Scalar 组件的输入数据类型为标量,该组件的作用是将训练参数以折线图形式呈现。将损失函数值、准确率等标量数据作为参数传入 scalar 组件,即可画出折线图,便于观察变化趋势。 -> :param dir : 指定日志文件的保存路径。 -> :param sync_cycle : 同步周期。经过 sync_cycle 次添加数据的操作,就执行一次将数据从内存写入磁盘的操作。 -> :return: 函数返回一个 LogWriter 对象。 +### 记录接口 -例1 创建一个 LogWriter 对象 +Scalar 组件的记录接口如下: ```python -# 创建一个 LogWriter 对象 log_writer -log_writer = LogWriter("./log", sync_cycle=10) +add_scalar(tag, value, step, walltime=None) ``` -LogWriter类的成员函数包括: +接口参数说明如下: -* `mode()`; -* `scalar()`, `histogram()`, `image()`, `text()`, `audio()`, `embedding()`; +| 参数 | 格式 | 含义 | +| -------- | ------ | ------------------------------------------- | +| tag | string | 记录指标的标志,如`train/loss`,不能含有`%` | +| value | float | 要记录的数据值 | +| step | int | 记录的步数 | +| walltime | int | 记录数据的时间戳,默认为当前时间戳 | -成员函数 `mode()` 用于指定模式。模式的名称是自定义的,比如训练`train`,验证`validation`,测试`test`,第一层卷积`conv_layer1`。 有着相同模式名称的组件作为一个整体,用户可在前端网页中的 `Runs` 按钮中选择显示哪个模式的数据(默认是显示全部模式)。 +### Demo -成员函数 `scalar()`, `histogram()`, `image()`, `text()`, `audio()`, `embedding()` 用于创建组件。 +- 基础使用 -例2 LogWriter 创建组件 +下面展示了使用 Scalar 组件记录数据的示例,代码文件请见[Scalar组件](https://github.com/PaddlePaddle/VisualDL/blob/develop/demo/components/scalar_test.py) ```python -# 设定模式为 train,创建一个 scalar 组件 -with log_writer.mode("train") as logger: - train_scalar = logger.scalar("acc") -# 设定模式为test,创建一个 image 组件 -with log_writer.mode("test") as shower: - test_image = shower.image("conv_image", 10, 1) -``` +from visualdl import LogWriter -### scalar -- 折线图组件 +if __name__ == '__main__': + value = [i/1000.0 for i in range(1000)] + # 初始化一个记录器 + with LogWriter(logdir="./log/scalar_test/train") as writer: + for step in range(1000): + # 向记录器添加一个tag为`acc`的数据 + writer.add_scalar(tag="acc", step=step, value=value[step]) + # 向记录器添加一个tag为`loss`的数据 + writer.add_scalar(tag="loss", step=step, value=1/(value[step] + 1)) +``` -scalar 组件的输入数据类型为标量,该组件的作用是画折线图。将损失函数值、准确率等标量数据作为参数传入 scalar 组件,即可画出折线图,便于观察变化趋势。 +运行上述程序后,在命令行执行 -想通过 scalar 组件画折线图,只需先设定 LogWriter 对象的成员函数 `scalar()`,即可使用 `add_record()` 函数添加数据。这两个函数的具体用法如下: +```shell +visualdl --logdir ./log --port 8080 +``` -* LogWriter 对象的成员函数 `scalar()`: +接着在浏览器打开`http://127.0.0.1:8080`,即可查看以下折线图。 -```python -def scalar(tag, type) -``` ++ +
-> :param tag : 标签,tag 相同的折线在同一子框,否则不同,tag 的名称中不能有 % 这个字符。 -> :param type : 数据类型,可选“float”, "double", "int",默认值为 "float"。 -> :return: 函数返回一个 ScalarWriter 对象。 -* scalar 组件的成员函数 `add_record()`: +- 多组实验对比 -```python -def add_record(step, value) -``` +下面展示了使用Scalar组件实现多组实验对比 -> :param step : 步进数,标记这是第几个添加的数据。 -> :param value : 输入数据。 +多组实验对比的实现分为两步: -例3 scalar 组件示例程序 [Github](https://github.com/PaddlePaddle/VisualDL/blob/develop/demo/component/scalar-demo.py) +1. 创建子日志文件储存每组实验的参数数据 +2. 将数据写入scalar组件时,**使用相同的tag**,即可实现对比**不同实验**的**同一类型参数** ```python -# coding=utf-8 from visualdl import LogWriter -# 创建 LogWriter 对象 -log_writer = LogWriter("./log", sync_cycle=20) +if __name__ == '__main__': + value = [i/1000.0 for i in range(1000)] + # 步骤一:创建父文件夹:log与子文件夹:scalar_test + with LogWriter(logdir="./log/scalar_test") as writer: + for step in range(1000): + # 步骤二:向记录器添加一个tag为`train/acc`的数据 + writer.add_scalar(tag="train/acc", step=step, value=value[step]) + # 步骤二:向记录器添加一个tag为`train/loss`的数据 + writer.add_scalar(tag="train/loss", step=step, value=1/(value[step] + 1)) + # 步骤一:创建第二个子文件夹scalar_test2 + value = [i/500.0 for i in range(1000)] + with LogWriter(logdir="./log/scalar_test2") as writer: + for step in range(1000): + # 步骤二:在同样名为`train/acc`下添加scalar_test2的accuracy的数据 + writer.add_scalar(tag="train/acc", step=step, value=value[step]) + # 步骤二:在同样名为`train/loss`下添加scalar_test2的loss的数据 + writer.add_scalar(tag="train/loss", step=step, value=1/(value[step] + 1)) +``` + +运行上述程序后,在命令行执行 -# 创建 scalar 组件,模式为 train -with log_writer.mode("train") as logger: - train_acc = logger.scalar("acc") - train_loss = logger.scalar("loss") +```shell +visualdl --logdir ./log --port 8080 +``` -# 创建 scalar 组件,模式设为 test, tag 设为 acc -with log_writer.mode("test") as logger: - test_acc = logger.scalar("acc") +接着在浏览器打开`http://127.0.0.1:8080`,即可查看以下折线图,对比「scalar_test」和「scalar_test2」的Accuracy和Loss。 -value = [i/1000.0 for i in range(1000)] -for step in range(1000): - # 向名称为 acc 的图中添加模式为train的数据 - train_acc.add_record(step, value[step]) ++ +
- # 向名称为 loss 的图中添加模式为train的数据 - train_loss.add_record(step, 1 / (value[step] + 1)) - - # 向名称为 acc 的图中添加模式为test的数据 - test_acc.add_record(step, 1 - value[step]) -``` +*多组实验对比的应用案例可参考AI Studio项目:[VisualDL 2.0--眼疾识别训练可视化](https://aistudio.baidu.com/aistudio/projectdetail/502834) -运行上述程序后,在命令行中执行 -```shell -visualdl --logdir ./log --host 0.0.0.0 --port 8080 -``` +### 功能操作说明 -接着在浏览器打开 [http://0.0.0.0:8080](http://0.0.0.0:8080),即可查看以下折线图。 +* 支持数据卡片「最大化」、「还原」、「坐标系转化」(y轴对数坐标)、「下载」折线图
-
-图1. scalar 组件展示折线图
+
+ +
-想通过 histogram 组件画参数直方图,只需先设定 LogWriter 对象的成员函数 `histogram()`,即可使用 `add_record()` 函数添加数据。这两个函数的具体用法如下: -* LogWriter 对象的成员函数 `histogram()`: -```python -def histogram(tag, num_buckets, type) -``` -> :param tag : 标签,结合 LogWriter 指定的模式,决定输入参数显示的子框。 -> :param num_buckets : 直方图的柱子数量。 -> :param type : 数据类型,可选“float”, "double", "int",默认值为 "float"。 -> :return: 函数返回一个 HistogramWriter 对象。 +* 可搜索卡片标签,展示目标图像 -* histogram 组件的成员函数 `add_record()`: ++ +
-```python -def add_record(step, data) -``` -> :param step : 步进数,标记这是第几组添加的数据。 -> :param data : 输入参数, 数据类型为 list[]。 -例4 histogram 组件示例程序 [Github](https://github.com/PaddlePaddle/VisualDL/blob/develop/demo/component/histogram-demo.py) -```python -# coding=utf-8 -import numpy as np -from visualdl import LogWriter +* 可搜索打点数据标签,展示特定数据 -# 创建 LogWriter 对象 -log_writer = LogWriter('./log', sync_cycle=10) ++ +
-# 创建 histogram 组件,模式为train -with log_writer.mode("train") as logger: - param1_histogram = logger.histogram("param1", num_buckets=100) -# 设定步数为 1 - 100 -for step in range(1, 101): - # 添加的数据为随机分布,所在区间值变小 - interval_start = 1 + 2 * step/100.0 - interval_end = 6 - 2 * step/100.0 - data = np.random.uniform(interval_start, interval_end, size=(10000)) - # 使用 add_record() 函数添加数据 - param1_histogram.add_record(step, data) -``` +* X轴有三种衡量尺度 -运行上述程序后,在命令行中执行 +1. Step:迭代次数 +2. Walltime:训练绝对时间 +3. Relative:训练时长 -```shell -visualdl --logdir ./log --host 0.0.0.0 --port 8080 -``` ++ +
-接着在浏览器打开[http://0.0.0.0:8080](http://0.0.0.0:8080),即可查看 histogram 组件的直方图。其中横坐标为参数的数值,曲线上的值为相应参数的个数。右边纵轴的值为 Step,不同 Step 的数据组用不同颜色加以区分。 +* 可调整曲线平滑度,以便更好的展现参数整体的变化趋势
-
-图2. histogram 组件展示直方图
+
-
-图3. image 组件展示图片
+
+ +
-运行上述程序后,在命令行中执行 -```shell -visualdl --logdir ./log --host 0.0.0.0 --port 8080 -``` -接着在浏览器打开 [http://0.0.0.0:8080](http://0.0.0.0:8080),点击页面最上方的 `SAMPLES` 选项,即可查看 text 组件的展示文本。每一张小框都有一条浅绿色的横轴,拖动即可显示不同 step 的文本。 +支持滑动Step/迭代次数查看不同迭代次数下的图片数据
-
-图4. text 组件展示文本
+
+ +
+ + +### 功能操作说明 + +- 可搜索音频标签显示对应音频数据 + ++ +
+ + +- 支持滑动Step/迭代次数试听不同迭代次数下的音频数据 + ++ +
+ + +- 支持播放/暂停音频数据 + ++ +
+ + +- 支持音量调节 + ++ +
+ + +- 支持音频下载
-
-图5. audio 组件播放音频
+
+ +
+ + +- 后端启动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 -def embedding() +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 ``` -* high dimensional 的成员函数 `add_embeddings_with_word_dict()`: +在浏览器输入`http://127.0.0.1:8080`,即可查看训练参数直方图。 + +### 功能操作说明 + +- 支持数据卡片「最大化」、直方图「下载」 + ++ +
+ +- 可选择Offset或Overlay模式 + ++ +
+ + + - Offset模式 + ++ +
+ + + - Overlay模式 + ++ +
+ +- 数据点Hover展示参数值、训练步数、频次 + + - 在第240次训练步数时,权重为-0.0031,且出现的频次是2734次 + ++ +
+ +- 可搜索卡片标签,展示目标直方图 + ++ +
+ +- 可搜索打点数据标签,展示特定数据流 + ++ +
+ +## PR Curve--PR曲线组件 + +### 介绍 + +PR Curve以折线图形式呈现精度与召回率的权衡分析,清晰直观了解模型训练效果,便于分析模型是否达到理想标准。 + +### 记录接口 + +PR Curve组件的记录接口如下: ```python -def add_embeddings_with_word_dict(data, Dict) +add_pr_curve(tag, labels, predictions, step=None, num_thresholds=10) ``` -> :param data : 输入数据,数据类型为 List[List(float)]。 -> :param Dict : 字典, 数据类型为 Dict[str, int]。 +接口参数说明如下: + +| 参数 | 格式 | 含义 | +| -------------- | --------------------- | ------------------------------------------- | +| 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 -例8 high dimensional 组件示例程序 [Github](https://github.com/PaddlePaddle/VisualDL/blob/develop/demo/component/embedding-demo.py) +下面展示了使用 PR Curve 组件记录数据的示例,代码文件请见[PR Curve组件](#https://github.com/PaddlePaddle/VisualDL/blob/develop/demo/components/pr_curve_test.py) ```python -# coding=utf-8 -import numpy as np from visualdl import LogWriter +import numpy as np -# 创建一个 LogWriter 对象 -log_writer = LogWriter("./log", sync_cycle=10) - -# 创建一个 high dimensional 组件,模式设为 train -with log_writer.mode("train") as logger: - train_embedding = logger.embedding() - -# 第一个参数为数据,数据类型为 List[List(float)] -hot_vectors = np.random.uniform(1, 2, size=(10, 3)) -# 第二个参数为字典,数据类型为 Dict[str, int] -# 其中第一个分量为坐标点的名称, 第二个分量为该坐标对应原数据的第几行分量 -word_dict = { - "label_1": 5, - "label_2": 4, - "label_3": 3, - "label_4": 2, - "label_5": 1,} - -# 使用 add_embeddings_with_word_dict(data, Dict) -train_embedding.add_embeddings_with_word_dict(hot_vectors, word_dict) +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 --host 0.0.0.0 --port 8080 +visualdl --logdir ./log --port 8080 ``` -接着在浏览器打开[http://0.0.0.0:8080](http://0.0.0.0:8080),点击页面最上方的 `HIGHDIMENSIONAL` 选项,即可查看数据映射后的相对位置。 +接着在浏览器打开`http://127.0.0.1:8080`,即可查看PR Curve
-
-图6. high dimensional 组件展示平面坐标
+
-
-图7. high dimensional 组件展示直角坐标
-
+ +
-例9 graph 组件示例程序(下面示例展示了如何用 Paddle 保存一个 Lenet-5 模型)[Github](https://github.com/PaddlePaddle/VisualDL/blob/develop/demo/component/graph-demo.py) +- 数据点Hover展示详细信息:阈值对应的TP、TN、FP、FN + ++ +
+ +- 可搜索卡片标签,展示目标图表 + ++ +
+ +- 可搜索打点数据标签,展示特定数据 + ++ +
+ + +- 支持查看不同训练步数下的PR曲线 + ++ +
+ +- X轴-时间显示类型有三种衡量尺度 + + - Step:迭代次数 + - Walltime:训练绝对时间 + - Relative:训练时长 + ++ +
+ +## High Dimensional -- 数据降维组件 + +### 介绍 + +High Dimensional 组件将高维数据进行降维展示,用于深入分析高维数据间的关系。目前支持以下两种降维算法: + + - PCA : Principle Component Analysis 主成分分析 + - t-SNE : t-distributed stochastic neighbor embedding t-分布式随机领域嵌入 + +### 记录接口 + +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 | 记录数据的时间戳,默认为当前时间戳 | + +### Demo + +下面展示了使用 High Dimensional 组件记录数据的示例,代码文件请见[High Dimensional组件](https://github.com/PaddlePaddle/VisualDL/blob/develop/demo/components/high_dimensional_test.py) ```python -# coding=utf-8 -import paddle.fluid as fluid - - -def lenet_5(img): - ''' - 定义神经网络结构 - ''' - conv1 = fluid.nets.simple_img_conv_pool( - input=img, - filter_size=5, - num_filters=20, - pool_size=2, - pool_stride=2, - act="relu") - - conv1_bn = fluid.layers.batch_norm(input=conv1) - - conv2 = fluid.nets.simple_img_conv_pool( - input=conv1_bn, - filter_size=5, - num_filters=50, - pool_size=2, - pool_stride=2, - act="relu") - - predition = fluid.layers.fc(input=conv2, size=10, act="softmax") - return predition - - -# 变量赋值 -image = fluid.layers.data(name="img", shape=[1, 28, 28], dtype="float32") -predition = lenet_5(image) - -place = fluid.CPUPlace() -exe = fluid.Executor(place=place) -exe.run(fluid.default_startup_program()) - -# 使用函数 save_inference_model() 保存 paddle 模型 -fluid.io.save_inference_model( - "./paddle_lenet_5_model", - feeded_var_names=[image.name], - target_vars=[predition], - executor=exe) +from visualdl import LogWriter + + +if __name__ == '__main__': + hot_vectors = [ + [1.3561076367500755, 1.3116267195134017, 1.6785401875616097], + [1.1039614644440658, 1.8891609992484688, 1.32030488587171], + [1.9924524852447711, 1.9358920727142739, 1.2124401279391606], + [1.4129542689796446, 1.7372166387197474, 1.7317806077076527], + [1.3913371800587777, 1.4684674577930312, 1.5214136352476377]] + + labels = ["label_1", "label_2", "label_3", "label_4", "label_5"] + # 初始化一个记录器 + with LogWriter(logdir="./log/high_dimensional_test/train") as writer: + # 将一组labels和对应的hot_vectors传入记录器进行记录 + writer.add_embeddings(tag='default', + labels=labels, + hot_vectors=hot_vectors) ``` -运行上述程序后,在命令行中执行 +运行上述程序后,在命令行执行 ```shell -visualdl --logdir ./log --host 0.0.0.0 --port 8080 --model_pb paddle_lenet_5_model +visualdl --logdir ./log --port 8080 ``` -接着在浏览器打开[http://0.0.0.0:8080](http://0.0.0.0:8080),点击页面最上方的`GRAPHS`选项,即可查看 Lenet-5 的模型结构。 +接着在浏览器打开`http://127.0.0.1:8080`,即可查看降维后的可视化数据。
-
-图8. graph 组件展示 Lenet-5 的模型结构
-