目录

1.visualDL简介

2.用Scalar图可视化损失和精度

2.1记录接口

2.2使用核心代码

3.在AI Studio中体验

3.1流程

3.2训练MNIST识别模型

3.2.1定义数据和模型等

3.2.2训练并记录日志

3.2.3可视化


1.visualDL简介

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

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

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

2.用Scalar图可视化损失和精度

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

2.1记录接口

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

参数            格式      含义
tag              string    记录指标的标志,如train/loss,不能含有%
value           float     要记录的数据值
step             int        记录的步数
walltime       int        记录数据的时间戳,默认为当前时间戳

*注意tag的使用规则为:

  1. 第一个/前的为父tag,并作为一栏图片的tag
  2. 第一个/后的为子tag,子tag的对应图片将显示在父tag下
  3. 可以使用多次/,但一栏图片的tag依旧为第一个/前的tag

2.2使用核心代码

Step1 训练代码中增加 Loggers 来记录不同种类的数据.

Step2 训练过程中插入数据打点语句,将结果储存至日志文件中

方式一:

from visualdl import LogWriterif __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))

方式二:

# 如果不想使用上下文管理器`with`,可拆解为以下几步完成:
"""
writer = LogWriter(logdir="./log/scalar_test/train")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)writer.close()
"""

2.3启动服务

在命令行执行 visualdl --logdir ./log --port 8080,

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

支持在Python脚本中启动VisualDL面板,接口如下:

visualdl.server.app.run(logdir,model="path/to/model",host="127.0.0.1",port=8080,cache_timeout=20,language=None,public_path=None,api_only=False,open_browser=False)

如:

from visualdl.server import appapp.run(logdir="./log")

3.在AI Studio中体验

3.1流程

Step1 训练代码中增加 Loggers 来记录不同种类的数据. 注意我们的logdir = "./log", 即需要把log目录放到/home/aistudio/log.

Step2 训练过程中插入数据打点语句,将结果储存至日志文件中

Step3 切换到「可视化」页签,指定日志文件与模型文件(不指定日志文件无法启动VisualDL)

3.2训练MNIST识别模型

3.2.1定义数据和模型等

from visualdl import LogWriter
import paddle
from paddle.vision.transforms import ToTensor
from paddle.io import DataLoaderbatch_size = 20
num_epoch = 10#数据加载
train_data = paddle.vision.datasets.MNIST(mode='train', transform=ToTensor())
test_data = paddle.vision.datasets.MNIST(mode='test', transform=ToTensor())
train_loader = DataLoader(train_data, batch_size=batch_size, shuffle=True)
test_loader = DataLoader(test_data, batch_size=batch_size, shuffle=True)#模型、优化器和损失精度的定义
model = paddle.vision.models.LeNet()
opt = paddle.optimizer.SGD(learning_rate=1e-3, parameters=model.parameters())
loss = paddle.nn.CrossEntropyLoss()
acc_fn = paddle.metric.accuracynum_batch_train = int(len(train_data)/batch_size) + 1
num_batch_test = int(len(test_data)/batch_size) + 1

3.2.2训练并记录日志

with LogWriter(logdir='./log/scalar_test/train') as writer:for epoch in range(num_epoch):model.train()for id, data in enumerate(train_loader):image = data[0]label = data[1]prediction = model(image)l = loss(prediction, label)acc = acc_fn(prediction, label)opt.clear_grad()l.backward()opt.step()writer.add_scalar(tag='train/loss', step=epoch*num_batch_train+id, value=l)writer.add_scalar(tag='train/acc', step=epoch*num_batch_train+id, value=acc)model.eval()for id, data in enumerate(test_loader):image = data[0]label = data[1]prediction = model(image)l = loss(prediction, label)acc = acc_fn(prediction, label)writer.add_scalar(tag='test/loss', step=epoch*num_batch_test+id, value=l)writer.add_scalar(tag='test/acc', step=epoch*num_batch_test+id, value=acc)

可以看到 writer.add_scalar()函数中的tag分为两个主tag,分别是train和test,每个主标签下又设置了两个子标签loss和acc。由于是双重循环,记录步骤step参数要做到不重叠,因此每一轮的id要加上轮数epoch*总数num_batch

3.2.3可视化

visualDL(一)scalar标量图相关推荐

  1. 论文绘图——标量图篇

    首先说下我对论文中的标量图(位图)的理解,需要借助其它软件生成的基础图和实验代码运行结果图.我觉得只有这两类图按标量图绘制.其它可以自己画的建议使用矢量图(展示效果更清晰). 一.对于方法描述需要的示 ...

  2. 位图(标量图)和矢量图的区别

    FROM 義字當頭 http://blog.163.com/lee_020/blog/static/12475560201275113146796/ 1.位图图像(bitmap) 亦称为点阵图像或绘制 ...

  3. 【一】AI Studio 项目详解【(一)VisualDL工具、环境使用说明、脚本任务、图形化任务、在线部署及预测】PARL

    相关文章 [一]-环境配置+python入门教学 [二]-Parl基础命令 [三]-Notebook.&pdb.ipdb 调试 [四]-强化学习入门简介 [五]-Sarsa&Qlear ...

  4. [Perl语法篇] 数据类型:标量$Scalar

    I.知识点概要: 1.标量(数字型.字符型) 1.标量$Scalar 标量是用于存放一个值的变量,这个值可以是数字,也可以是字符串(其实数字就是字符串). Perl通过变量前的"魔符&quo ...

  5. python求语音信号短时能量、短时过零率、语谱图

    python语音信号处理(二) 一.短时能量 短时能量主要用于区分浊音段和清音段,因为浊音时E(i)值比清音时大得多:区分声母与韵母的分界和无话段与有话段分界. 计算第i帧语音信号yi(n)的短时能量 ...

  6. 机器学习中的标量、向量、矩阵、和张量的概念

    在线性代数中,我们必须掌握几个核心概念:标量.向量.矩阵和张量,它们是构成线性代数学科的基石. 标量 (Scalar) 标量其实就是一个独立存在的数,比如在线性代数中一个实数 5 就可以被看作一个标量 ...

  7. [WPF]WPF中材质制作——图片和矢量图之争

    如果要做下面这样的一个东西作为背景.你会如何做呢? 图1. 目标背景效果 方案一,用PS画出来.然后把这个PNG图片作为背景色.这个方案可以,但是如果想让这个线的颜色可配置呢?如何线的粗细不确定呢?无 ...

  8. 【TensorFlow】——不同shape的tensor在神经网络中的应用(scalar,vector,matrix)

    目录 ​ 1.scalar--标量 1)在神经网络中存在的场景 2)one_hot编码 3)举例应用 2.vector--向量 ​ 3.matrixs--矩阵 4.dim=3的tensor 5.dim ...

  9. openFOAM中的Scalar

    位于路径src/OpenFOAM/primitives/Scalar 标量,其实就是浮点数.但是浮点数具有不同的精度,最终文件将根据宏的设置决定程序使用哪种精度 文件依赖关系如下: 注意这里大小写的s ...

最新文章

  1. Linux 准确查找结构体定义位置
  2. CEPH给用户创建读写权限
  3. WinCE中串口驱动及接口函数介绍
  4. Android Intent 用法总结
  5. Principle for Mac:让你五分钟即可制作出一个具有完整交互动画的原型
  6. c语言 枚举类型 uint32_最全面C语言数据基本数据类型解析
  7. adobe reader XI 打开后闪退(或过几秒后自动退出)【解决方案】
  8. 生产订单管理系统软件哪家好?
  9. operator重载运算符
  10. 【kindle笔记】之 《犬夜叉》-2017-12-26
  11. dnf剑魂buff等级上限_DNF:心悦专区重新开放,道具及等级上限调整
  12. html打气球游戏,打气球.html
  13. python 问题Some characters could not be decoded, and were replaced with REPLACEMENT CHARACTER.
  14. 计算机屏幕发蓝,电脑的颜色突然变成蓝色了,屏幕,什么颜色都和以
  15. codeforces 757e Bash Plays with Functions
  16. STM32-外部中断详解
  17. 彻底关闭FF新闻资讯
  18. 学习USART自闭实录(stm32F411RE)Stm32cubemx
  19. LiteOS通信模组教程04-深度剖析LiteOS的AT框架
  20. 第十节 Java工具包-Collections 流--lambada表达式

热门文章

  1. 学java应该学什么
  2. 创建两个线程,其中一个输出1-52,另外一个输出A-Z。输出格式要求:12A 34B 56C 78D 依次类推
  3. 数值计算笔记之非线性方程的求解(一)二分法
  4. tcpdump、nc
  5. Win10 wsl-安装教程
  6. 手写杀毒软件——放心的安全卫士
  7. 网页控制台控制视频倍速
  8. 窗函数(window function)
  9. python statsmodels安装(亲测可用)
  10. Mac下代码中文乱码问题解决方法