paddle之visualDL工具使用,可视化利器。

2022-12-21 16:52:16 浏览数 (2)

相关链接:

【一】AI Studio 项目详解【(一)VisualDL工具、环境使用说明、脚本任务、图形化任务、在线部署及预测】PARL_汀、的博客-CSDN博客

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

目前,VisualDL 支持 scalar, image, audio, graph, histogram, pr curve, high dimensional 七个组件.

组件名称

展示图表

作用

Scalar

折线图

动态展示损失函数值、准确率等标量数据

Image

图片可视化

显示图片,可显示输入图片和处理后的结果,便于查看中间过程的变化

Audio

音频播放

播放训练过程中的音频数据,监控语音识别与合成等任务的训练过程

Graph

网络结构

展示网络结构、节点属性及数据流向,辅助学习、优化网络结构

Histogram

直方图

展示训练过程中权重、梯度等张量的分布

PR Curve

折线图

权衡精度与召回率之间的平衡关系,便于选择最佳阈值

High Dimensional

数据降维

将高维数据映射到 2D/3D 空间来可视化嵌入,便于观察不同数据的相关性

1.在训练程序使用添加如下:

代码语言:javascript复制
from visualdl import LogWriter
#参数记录参考,程序中填写参考这个
"""
def train():
    writer=LogWriter("./log/scalar_test")
    writer1=LogWriter("./log/scalar_test1")
    
    writer.add_scalar(tag="train/loss", step=global_step, value=loss_avg)
    
    writer1.add_scalar(tag="train/precision", step=global_step, value=precision)
    writer1.add_scalar(tag="train/recall", step=global_step, value=recall)
    writer1.add_scalar(tag="train/f1", step=global_step, value=f1)
    
    with LogWriter(logdir="paddle_lenet_log/lr0.001") as writer:
        # 使用scalar组件记录一个标量数据
        if step % 10 == 0:
            # add scalar
            writer.add_scalar(tag="train/loss", step=step, value=cost)
            writer.add_scalar(tag="train/acc", step=step, value=accuracy)

"""

 分别记录loss、F1等指标

2.在本地执行相关指令、多个记录器

添加两个记录器

代码语言:javascript复制
from visualdl import LogWriter

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))

终端指令:

#在命令行执行:

代码语言:javascript复制
visualdl --logdir ./log --port 8080

路径:(paddlenlp) C:UsersadminDesktopnlp>visualdl --logdir ./log --port 8080   在log文件夹前执行 add_scalar(tag, value, step, walltime=None) tag string  记录指标的标志,如train/loss,不能含有% value   float   要记录的数据值 step    int 记录的步数 walltime    int 记录数据的时间戳,默认为当前时间戳

代码语言:javascript复制
from visualdl import LogWriter

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))

3.PR Curve--PR曲线组件

代码语言:javascript复制
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)

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

4.High Dimensional--数据降维组件

代码语言:javascript复制
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)

5.HyperParameters--超参可视化组件

代码语言:javascript复制
from visualdl import LogWriter

# 此demo演示了两次实验的超参数记录,以第一次实验数据为例,首先在`add_hparams`接口中记录
# 超参数`hparams`的数据,再标定了稍后要记录的`metrics`名称,最后通过`add_scalar`再具体
# 记录`metrics`的数据。此处需注意`add_hparams`接口中的`metrics_list`参数需要包含`add_scalar`
# 接口的`tag`参数。
if __name__ == '__main__':
    # 记录第一次实验数据
    with LogWriter('./log/hparams_test/train/run1') as writer:
        # 记录hparams数值和metrics名称
        writer.add_hparams(hparams_dict={'lr': 0.1, 'bsize': 1, 'opt': 'sgd'},
                           metrics_list=['hparam/accuracy', 'hparam/loss'])
        # 通过将add_scalar接口中的tag与metrics名称对应,记录一次实验中不同step的metrics数值
        for i in range(10):
            writer.add_scalar(tag='hparam/accuracy', value=i, step=i)
            writer.add_scalar(tag='hparam/loss', value=2*i, step=i)

    # 记录第二次实验数据
    with LogWriter('./log/hparams_test/train/run2') as writer:
        # 记录hparams数值和metrics名称
        writer.add_hparams(hparams_dict={'lr': 0.2, 'bsize': 2, 'opt': 'relu'},
                           metrics_list=['hparam/accuracy', 'hparam/loss'])
        # 通过将add_scalar接口中的tag与metrics名称对应,记录一次实验中不同step的metrics数值
        for i in range(10):
            writer.add_scalar(tag='hparam/accuracy', value=1.0/(i 1), step=i)
            writer.add_scalar(tag='hparam/loss', value=5*i, step=i)

0 人点赞