【一】AI Studio 项目详解【(一)VisualDL工具、环境使用说明、脚本任务、图形化任务、在线部署及预测】PARL
相关文章
AI Studio 项目详解【VisualDL工具】
1.VisualDL工具
VisualDL是一个面向深度学习任务设计的可视化工具。VisualDL 利用了丰富的图表来展示数据,用户可以更直观、清晰地查看数据的特征与变化趋势,有助于分析数据、及时发现错误,进而改进神经网络模型的设计。喜欢的同学可以去star支持一下哦~
AI Studio Notebook 项目(Paddle1.8.0及以上版本)已经集成VisualDL工具以便于您的使用,可在可视化tab中启动VisualDL服务。
VisualDL 支持 scalar, image, audio, graph, histogram, pr curve, high dimensional 七个组件。

1.2 Al Studio操作说明
详细操作链接:https://aistudio.baidu.com/aistudio/projectdetail/1739945
Step1 训练代码中增加 Loggers 来记录不同种类的数据. 注意我们的
logdir = "./log", 即需要把log目录放到/home/aistudio/log.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:Step2 训练过程中插入数据打点语句,将结果储存至日志文件中
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))Step3 切换到「可视化」页签,指定日志文件与模型文件(不指定日志文件无法启动VisualDL)
- 创建日志文件
LogWriter,设置实验结果存放路径,默认上一级路径为'./home/aistudio'- 训练过程中插入数据打点语句,将结果储存至日志文件中
- 切换到「可视化」页签,指定日志文件与模型文件(不指定日志文件无法启动VisualDL)
- 选择日志文件 (适用于scalar, image, histogram, pr curve, high dimensional五种组件)
![]()
可以选择多个,后缀为log的文件。
- 选择模型文件(适用于graph)
![]()
- *注意:VisualDL启动中不可删除或替换日志/模型文件;日志文件可多选,模型文件一次只能上传一个,且模型文件暂只支持模型网络结构,不支持展示各层参数。
具体码源编写情况见链接:https://aistudio.baidu.com/aistudio/projectdetail/1739945
训练网络并使用VisualDL2.0可视化训练过程
- 创建LeNet日志文件:
writer = LogWriter("./log/lenet")
- 训练过程中插入作图语句,展示accuracy和loss的变化趋势:
writer.add_scalar(tag="train/loss", step=step, value=cost) writer.add_scalar(tag="train/acc", step=step, value=accuracy)
- 创建多组子日志文件,以相同tag名记录同一类参数,实现多组实验对比:
writer=LogWriter('paddle_lenet_log/lr0.001') writer1=LogWriter('paddle_lenet_log/lr0.01') writer2=LogWriter('paddle_lenet_log/lr0.05') writer3=LogWriter('paddle_lenet_log/lr0.1') writer.add_scalar(tag="train/loss", step=step, value=cost) writer.add_scalar(tag="train/acc", step=step, value=accuracy) writer1.add_scalar(tag="train/loss", step=step, value=cost) writer1.add_scalar(tag="train/acc", step=step, value=accuracy) writer2.add_scalar(tag="train/loss", step=step, value=cost) writer2.add_scalar(tag="train/acc", step=step, value=accuracy) writer3.add_scalar(tag="train/loss", step=step, value=cost) writer3.add_scalar(tag="train/acc", step=step, value=accuracy)
- 记录每一批次中的第一张图片:
img = np.reshape(batch[0][0], [28, 28, 1]) * 255 writer.add_image(tag="train/input", step=step, img=img)
- 记录训练过程中每一层网络权重(weight)、偏差(bias)的变化趋势:
writer.add_histogram(tag='train/{}'.format(param), step=step, values=values)
- 记录分类效果--precision & recall曲线:
writer.add_pr_curve(tag='train/class_{}_pr_curve'.format(i),
labels=label_i,
predictions=prediction_i,
step=step,
num_thresholds=20)
- 保存模型结构:
fluid.io.save_inference_model(dirname='./model', feeded_var_names=['img'],target_vars=[predictions], executor=exe)
1.3 Scalar-标量组件
Scalar 组件的输入数据类型为标量,该组件的作用是将训练参数以折线图形式呈现。将损失函数值、准确率等标量数据作为参数传入 scalar 组件,即可画出折线图,便于观察变化趋势。
记录接口
Scalar 组件的记录接口如下:
add_scalar(tag, value, step, walltime=None)
接口参数说明如下:

*注意tag的使用规则为:
- 第一个
/前的为父tag,并作为一栏图片的tag - 第一个
/后的为子tag,子tag的对应图片将显示在父tag下 - 可以使用多次
/,但一栏图片的tag依旧为第一个/前的tag
- 创建train为父tag,acc和loss为子tag:
train/acc、train/loss,即创建了tag为train的图片栏,包含acc和loss两张图片:

- 创建train为父tag,test/acc和test/loss为子tag:
train/test/acc、train/test/loss,即创建了tag为train的图片栏,包含test/acc和test/loss两张图片:

- 创建两个父tag:
acc、loss,即创建了tag分别为acc和loss的两个图片栏::

举例demo基础使用:
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))
- 多组实验对比
下面展示了使用Scalar组件实现多组实验对比
多组实验对比的实现分为两步:
- 创建子日志文件储存每组实验的参数数据
- 将数据写入scalar组件时,使用相同的tag,即可实现对比不同实验的同一类型参数
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))
运行上述程序后,点击可视化选择相应日志文件即可查看以下折线图,观察scalar_test和scalar_test2的accuracy和loss的对比。

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

可进行数据流选择


- X轴有三种衡量尺度
- Step:迭代次数
- Walltime:训练绝对时间
- Relative:训练时长
1.4 lmage-图片可视化组件
Image 组件用于显示图片数据随训练的变化。在模型训练过程中,将图片数据传入 Image 组件,就可在 VisualDL 的前端网页查看相应图片。
记录接口
Image 组件的记录接口如下:
add_image(tag, img, step, walltime=None)接口参数说明如下:
import numpy as np
from PIL import Image
from visualdl import LogWriter def random_crop(img):
"""获取图片的随机 100x100 分片
"""
img = Image.open(img)
w, h = img.size
random_w = np.random.randint(0, w - 100)
random_h = np.random.randint(0, h - 100)
r = img.crop((random_w, random_h, random_w + 100, random_h + 100))
return np.asarray(r) if __name__ == '__main__':
# 初始化一个记录器
with LogWriter(logdir="./log/image_test/train") as writer:
for step in range(6):
# 添加一个图片数据
writer.add_image(tag="eye",
img=random_crop("../../docs/images/eye.jpg"),
step=step)
1.5 Audio--音频播放组件
Audio组件实时查看训练过程中的音频数据,监控语音识别与合成等任务的训练过程。
记录接口
Audio 组件的记录接口如下:
add_audio(tag, audio_array, step, sample_rate)
接口参数说明如下:

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)
1.6 Graph--网络结构组件
Graph组件一键可视化模型的网络结构。用于查看模型属性、节点信息、节点输入输出等,并进行节点搜索,协助开发者们快速分析模型结构与了解数据流向。
在生成Model文件后,在可视化模块中选择模型文件,启动后即可查看网络结构可视化:

- 支持模型格式: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
1.7 Histogram--直方图组件
Histogram组件以直方图形式展示Tensor(weight、bias、gradient等)数据在训练过程中的变化趋势。深入了解模型各层效果,帮助开发者精准调整模型结构。
记录接口
Histogram 组件的记录接口如下:
add_histogram(tag, values, step, walltime=None, buckets=10)
接口参数说明如下:

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)
可选择Offset或Overlay模式

数据点Hover展示参数值、训练步数、频次
- 在第240次训练步数时,权重为-0.0031,且出现的频次是2734次

1.8 PR Curve--PR曲线组件
PR Curve以折线图形式呈现精度与召回率的权衡分析,清晰直观了解模型训练效果,便于分析模型是否达到理想标准。
记录接口
PR Curve组件的记录接口如下:
add_pr_curve(tag, labels, predictions, step=None, num_thresholds=10)
接口参数说明如下:

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)
数据点Hover展示详细信息:阈值对应的TP、TN、FP、FN


其中,列对应于实例实际所属的类别,行表示分类预测的类别。
- TP(True Positive):指正确分类的正样本数,即预测为正样本,实际也是正样本。
- FP(False Positive):指被错误的标记为正样本的负样本数,即实际为负样本而被预测为正样本,所以是False。
- TN(True Negative):指正确分类的负样本数,即预测为负样本,实际也是负样本。
- FN(False Negative):指被错误的标记为负样本的正样本数,即实际为正样本而被预测为负样本,所以是False。
- TP+FP+TN+FN:样本总数。
- TP+FN:实际正样本数。
- TP+FP:预测结果为正样本的总数,包括预测正确的和错误的。
- FP+TN:实际负样本数。
- TN+FN:预测结果为负样本的总数,包括预测正确的和错误的
1.9 High Dimensional-数据降维组件
High Dimensional 组件将高维数据进行降维展示,用于深入分析高维数据间的关系。目前支持以下两种降维算法:
- PCA : Principle Component Analysis 主成分分析
- t-SNE : t-distributed stochastic neighbor embedding t-分布式随机领域嵌入
记录接口
High Dimensional 组件的记录接口如下:
add_embeddings(tag, labels, hot_vectors, walltime=None)

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)

参考链接:https://ai.baidu.com/ai-doc/AISTUDIO/Dk3e2vxg9
【一】AI Studio 项目详解【(一)VisualDL工具、环境使用说明、脚本任务、图形化任务、在线部署及预测】PARL的更多相关文章
- Android Studio 插件开发详解二:工具类
转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/78112856 本文出自[赵彦军的博客] 在插件开发过程中,我们按照开发一个正式的项 ...
- Android Studio 插件开发详解三:翻译插件实战
转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/78113868 本文出自[赵彦军的博客] 一:概述 如果不了解插件开发基础的同学可以 ...
- Android Studio 插件开发详解四:填坑
转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/78265540 本文出自[赵彦军的博客] 在前面我介绍了插件开发的基本流程 [And ...
- Android Studio 插件开发详解一:入门练手
转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/78112003 本文出自[赵彦军的博客] 一:概述 相信大家在使用Android S ...
- eclipse里面构建maven项目详解(转载)
本文来源于:http://my.oschina.net/u/1540325/blog/548530 eclipse里面构建maven项目详解 1 环境安装及分配 Maven是基于项目对象模 ...
- Redis 配置文件 redis.conf 项目详解
Redis.conf 配置文件详解 # [Redis](http://yijiebuyi.com/category/redis.html) 配置文件 # 当配置中需要配置内存大小时,可以使用 1k, ...
- Mac下Intellij IDea发布Web项目详解一
Mac下Intellij IDea发布Web项目详解一 Mac下Intellij IDea发布Java Web项目(适合第一次配置Tomcat的家伙们)详解二 Mac下Intellij IDea发布J ...
- Mac下Intellij IDea发布Java Web项目详解五 开始测试
测试前准备工作目录 Mac下Intellij IDea发布Web项目详解一 Mac下Intellij IDea发布Java Web项目(适合第一次配置Tomcat的家伙们)详解二 Mac下Intell ...
- JAVA Eclipse使用Maven构建web项目详解(SSM框架)
tips: 启动项目后,welcome-file的链接即为测试用例 部署maven web项目 Eclipse使用Maven构建web项目详解 pom.xml添加webapp依赖: <depen ...
- 利用Intellij+MAVEN搭建Spring+Mybatis+MySql+SpringMVC项目详解
http://blog.csdn.net/noaman_wgs/article/details/53893948 利用Intellij+MAVEN搭建Spring+Mybatis+MySql+Spri ...
随机推荐
- node做服务器
// 用于创建网站服务器的模块 const http = require('http'); // 创建web服务器,app对象就是网站服务器对象 const app = http.createServ ...
- C#将汉字转换为拼音
首先上效果图 方法调用 private void txt_Chinese_TextChanged(object sender, EventArgs e) { txt_PinYIn.Text = //调 ...
- springboot升级到2.6.x和2.7.x 兼容hystrix
一.pom.xml需要引入的依赖 二.项目开启熔断器开关 2.1 注解方式 2.2 xml方式 三.依赖类缺失问题 四.版本匹配安全检查问题 五.测试验证 六.结论 一.pom.xml需要引入的依赖 ...
- 01-Shell脚本入门
1.Shell介绍 1.1 疑问 linux系统是如何操作计算机硬件CPU,内存,磁盘,显示器等? 答: 使用linux的内核操作计算机的硬件 1.2 Shell介绍 通过编写Shell命令发送给li ...
- Linux 查看office文件及pdf文件
1.查看pdf文件 evince PdfFile_name 查看office文件 openoffice.org 文件名 & // 打开或者编辑.doc.odt等文本文档命令 openoffic ...
- 结构体中ElementType的使用
1.问题 在定义结构体时,对于元素值,为什么喜欢使用ElementType而不是直接使用int或者char等等? 2.结论 对于int get_result(int x); 和 int get_res ...
- JMS微服务开发示例(八)双机热备
双机热备,指两个一模一样的微服务,两个同时在运行,但是只有一个在工作,当工作中的微服务垮掉后,另一个会自行补上. 要实现这个,只需要设置 SingletonService = true. var mi ...
- Linux-软件包管理-rpm-yum-apt
- [转帖]SQL Server高级进阶之索引碎片维护
https://www.cnblogs.com/atomy/p/15268589.html 一.产生原因及影响 索引是数据库引擎中针对表(有时候也针对视图)建立的特别数据结构,用来帮助查找和整理数据, ...
- [转帖]Navicat连接openGauss数据库报错
news/2023/10/19 21:23:19 错误信息:fe_sendauth:invalid authentication request from server:AUTH_REQ_SASL_C ...



