visualdl_usage.md 8.1 KB
Newer Older
1

2

3
# VisualDL 使用指南
4

5
### 概述
6

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

9
目前,VisualDL 支持 scalar, image, high dimensional 三个组件,项目正处于高速迭代中,敬请期待新组件的加入。
10

11 12 13 14 15
|                           组件名称                           |  展示图表  | 作用                                                         |
| :----------------------------------------------------------: | :--------: | :----------------------------------------------------------- |
|      <a href="#1">[ Scalar](#Scalar -- 折线图组件)</a>       |   折线图   | 动态展示损失函数值、准确率等标量数据                         |
|      <a href="#3">[Image](#Image -- 图片可视化组件)</a>      | 图片可视化 | 显示图片,可显示输入图片和处理后的结果,便于查看中间过程的变化 |
| <a href="#6">[High Dimensional](#High Dimensional -- 数据降维组件)</a> |  数据降维  | 将高维数据映射到 2D/3D 空间来可视化嵌入,便于观察不同数据的相关性 |
16

17

18

19
## Scalar -- 折线图组件
20

21
### 介绍
22

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

25
### 记录接口
26

27
Scalar 组件的记录接口如下:
28

29
```python
30
add_scalar(tag, value, step, walltime=None)
31
```
32 33 34 35 36 37 38
接口参数说明如下:
|参数|格式|含义|
|-|-|-|
|tag|string|记录指标的标志,如`train/loss`,不能含有`%`|
|value|float|要记录的数据值|
|step|int|记录的步数|
|walltime|int|记录数据的时间戳,默认为当前时间戳|
39

40 41
### Demo
下面展示了使用 Scalar 组件记录数据的示例,代码见[Scalar组件](../../demo/components/scalar_test.py)
42 43 44
```python
from visualdl import LogWriter

45 46 47 48 49 50 51 52 53 54 55
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))
```
运行上述程序后,在命令行执行
56
```shell
57
visualdl --logdir ./log --port 8080
58
```
59

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

<p align="center">
63
  <img src="http://visualdl.bj.bcebos.com/images/scalar-globalstatic.png" width="100%"/>
64
</p>
65

66

67

68
### 功能操作说明
69

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

72 73 74
<p align="center">
  <img src="http://visualdl.bj.bcebos.com/images/scalar-icon.png" width="55%"/>
</p>
75 76


77

78
* 数据点Hover展示详细信息
79

80 81 82
<p align="center">
  <img src="http://visualdl.bj.bcebos.com/images/scalar-tooltip.png" width="60%"/>
</p>
83 84 85



86
* 可搜索卡片标签,展示目标图像
87

88 89 90
<p align="center">
  <img src="http://visualdl.bj.bcebos.com/images/scalar-searchlabel.png" width="90%"/>
</p>
91

92

93

94
* 可搜索打点数据标签,展示特定数据
95 96

<p align="center">
97
  <img src="http://visualdl.bj.bcebos.com/images/scalar-searchstream.png" width="40%"/>
98
</p>
99

100

101
* X轴有三种衡量尺度
102

103 104 105
1. Step:迭代次数
2. Walltime:训练绝对时间
3. Relative:训练时长
106

107 108 109 110
<p align="center">
  <img src="http://visualdl.bj.bcebos.com/images/x-axis.png" width="40%"/>
</p>
* 可调整曲线平滑度,以便更好的展现参数整体的变化趋势
111

112 113 114
<p align="center">
  <img src="http://visualdl.bj.bcebos.com/images/scalar-smooth.png" width="37%"/>
</p>
115

116

117
## Image -- 图片可视化组件
118

119
### 介绍
120

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

123
### 记录接口
124

125
Image 组件的记录接口如下:
126 127

```python
128
add_image(tag, img, step, walltime=None)
129
```
130 131 132 133 134 135 136
接口参数说明如下:
|参数|格式|含义|
|-|-|-|
|tag|string|记录指标的标志,如`train/loss`,不能含有`%`|
|img|numpy.ndarray|以ndarray格式表示的图片|
|step|int|记录的步数|
|walltime|int|记录数据的时间戳,默认为当前时间戳|
137

138 139
### Demo
下面展示了使用 Image 组件记录数据的示例,代码文件请见[Image组件](../../demo/components/image_test.py)
140 141 142
```python
import numpy as np
from PIL import Image
143
from visualdl import LogWriter
144 145 146


def random_crop(img):
147 148
    """获取图片的随机 100x100 分片
    """
149 150 151 152
    img = Image.open(img)
    w, h = img.size
    random_w = np.random.randint(0, w - 100)
    random_h = np.random.randint(0, h - 100)
153 154
    r = img.crop((random_w, random_h, random_w + 100, random_h + 100))
    return np.asarray(r)
155

156

157 158 159 160 161 162 163 164
if __name__ == '__main__':
    # 初始化一个记录器
    with LogWriter(logdir="./log/image_test/train") as writer:
        for step in range(6):
            # 添加一个图片数据
            writer.add_image(tag="doge",
                             img=random_crop("../../docs/images/eye.jpg"),
                             step=step)
165
```
166
运行上述程序后,在命令行执行
167
```shell
168
visualdl --logdir ./log --port 8080
169 170
```

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

<p align="center">
174
  <img src="http://visualdl.bj.bcebos.com/images/image-static.png" width="90%"/>
175
</p>
176 177


178
### 功能操作说明
179

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

182 183 184
<p align="center">
  <img src="http://visualdl.bj.bcebos.com/images/image-search.png" width="90%"/>
</p>
185

186

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

<p align="center">
190
  <img src="http://visualdl.bj.bcebos.com/images/image-eye.gif" width="60%"/>
191
</p>
192

193

194
## High Dimensional -- 数据降维组件
195

196
### 介绍
197

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

200 201
 - PCA : Principle Component Analysis 主成分分析
 - t-SNE : t-distributed stochastic neighbor embedding t-分布式随机领域嵌入
202

203
### 记录接口
204

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

207
```python
208
add_embeddings(tag, labels, hot_vectors, walltime=None)
209
```
210 211 212 213 214 215 216
接口参数说明如下:
|参数|格式|含义|
|-|-|-|
|tag|string|记录指标的标志,如`default`,不能含有`%`|
|labels|numpy.array 或 list|一维数组表示的标签,每个元素是一个string类型的字符串|
|hot_vectors|numpy.array or list|与labels一一对应,每个元素可以看作是某个标签的特征|
|walltime|int|记录数据的时间戳,默认为当前时间戳|
217

218 219
### Demo
下面展示了使用 High Dimensional 组件记录数据的示例,代码见[High Dimensional组件](../../demo/components/high_dimensional_test.py)
220 221 222
```python
from visualdl import LogWriter

223

224 225 226 227 228 229 230
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]]
231

232 233 234 235 236 237 238
    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)
239
```
240
运行上述程序后,在命令行执行
241
```shell
242
visualdl --logdir ./log --port 8080
243 244
```

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

<p align="center">
248
  <img src="http://visualdl.bj.bcebos.com/images/dynamic_high_dimensional.gif" width="80%"/>
249
</p>