Visual DL是由 PaddlePaddleECharts 合作推出的一款深度学习可视化工具,其能够可视化scalar、参数分布、模型结构、图像等。底层采用C++编写,上层SDK以python为主,也可以使用C++集成到其它平台。

如果你正在寻求深度学习任务设计的可视化工具,可以考虑Visual DL。类似于Tensorboard的在线可视化,支持更多的平台。VisualDL 兼容 ONNX, 通过与 python SDK的结合,VisualDL可以兼容包括 PaddlePaddle、 Pytorch、 MXNet 等在内的大部分主流DNN平台。而Tensorboard目前仅适用于Tensorflow、Pytorch、MXNet等。

本文介绍其最简单的scalar的用法, 用于展示训练测试的误差趋势。

安装

pip install --upgrade visualdl

库文件core.so及demo等python文件被放在site-package目录下面。

可以不从源码编译,而直接使用pip下载的core.so, 但是需要使用protoc将storage.pb转成C++源码文件,因为在使用sdk.h时会include protobuf生成的头文件。protoc得到的protobuf头文件版本与VisualDL编译所使用的protobuf版本最好一致(VisualDL使用的cmake版本号定义在VisualDL/cmake/external/protobuf.cmake中,如果两个库中使用了不同的版本,在运行时会冲突)。

protoc storage.proto --cpp_out .

使用

Python 中记录 Scalar 示例:

import random
from visualdl import LogWriter # 指定输出目录,同步周期
logdir = "./log"
logger = LogWriter(logdir, sync_cycle=30) # 设置此次记录的模式标签: train/test等
with logger.mode("train"):
# 创建名为 'scalars/loss0' 的scalar组件
loss0 = logger.scalar("scalars/loss0") # 模拟训练过程中的标量数据记录
for step in range(1000):
loss0.add_record(step, random.random())

运行之后会在logdir中生成日志文件,该日志目录中的文件可被VisualDL工具解析,用法与Tensorboard类似。

同功能的C++ SDK使用示例:

#include <cstdlib>
#include <string>
#include "visualdl/logic/sdk.h" namespace vs = visualdl;
namespace cp = visualdl::components; int main() {
const std::string dir = "./log";
vs::LogWriter logger(dir, 30); logger.SetMode("train");
auto tablet = logger.AddTablet("scalars/loss0"); cp::Scalar<float> loss0(tablet); for (int step = 0; step < 1000; step++) {
float v = (float) std::rand() / RAND_MAX;
loss0.AddRecord(step, v);
} return 0;
}

caffe1-loss曲线

虽然caffe1的大势已去,但做一些遗留的项目代码研究还是要用的。如果上述的示例能够成功运行,那么在caffe1中记录loss scalar是很容易的。

  1. 可以使用caffe的python接口获取loss。
  2. C++中调用VisualDL,如在solver.cpp中记录loss。编译时链接到VisualDL。示例代码在此 frcnn

    由于VisualDL静态链接了特定版本的protobuf,而caffe也需要protobuf,可以修改caffe的编译选项,取消对protobuf的动态链接。

在caffe1中还可以使用VisualDL的image功能,来可视化任何tensor,或模型生成的图片。通过使用VisualDL工具可以大大方便我们的可视化方式,不必再写额外的脚本独立地来做可视化。

查看board面板

visualDL --logdir

选项:

  • --host 绑定地址,如ipv6本地地址 ::
  • --port 绑定端口
  • --model_pb 指定ONNX可交换模型文件

得到的loss曲线如下:

Caffe可视化之VisualDL的更多相关文章

  1. 【深度学习系列】PaddlePaddle可视化之VisualDL

    上篇文章我们讲了如何对模型进行可视化,用的keras手动绘图输出CNN训练的中途结果,本篇文章将讲述如何用PaddlePaddle新开源的VisualDL来进行可视化.在讲VisualDL之前,我们先 ...

  2. Caffe实战五(Caffe可视化方法:编译matlab接口)

    接上一篇文章,这里给出配置caffe后编译matlab接口的方法.(参考:<深度学习 21天实战Caffe 第16天 Caffe可视化方法>) 1.将Matlab目录更新至Caffe的Ma ...

  3. Caffe实战四(Caffe可视化方法)

    面对一堆文件,一行行的数据,确实很难理解深度学习相关的概念,好比训练的数据.构建的网络是怎样的?今天按照书中第16天的内容实践了一翻,终于看到了所谓的深度神经网络的模样.(参考:<深度学习 21 ...

  4. caffe可视化模型

    进入$CAFFE_ROOT/python: $ python draw_net.py ../models/bvlc_reference_caffenet/train_val.prototxt caff ...

  5. caffe可视化

    1.画网络图 假    

  6. caffe 笔记

    caffe模块: blob:caffe中数据的封装,用于layer上流动 layer:输入层.输出层.神经网络层的抽象 net:神经网络结构,将layer层叠关联起来 solver:定义神经网络训练和 ...

  7. Caffe学习系列(17):模型各层数据和参数可视化

    cifar10的各层数据和参数可视化 .caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1p ...

  8. Caffe学习系列(16):caffemodel可视化

    通过前面的学习,我们已经能够正常训练各种数据了.设置好solver.prototxt后,我们可以把训练好的模型保存起来,如lenet_iter_10000.caffemodel. 训练多少次就自动保存 ...

  9. Caffe学习系列(13):数据可视化环境(python接口)配置

    caffe程序是由c++语言写的,本身是不带数据可视化功能的.只能借助其它的库或接口,如opencv, python或matlab.大部分人使用python接口来进行可视化,因为python出了个比较 ...

随机推荐

  1. java to kotlin (2) - lambda编程

    前言 Kotlin Note 是我学习kotlin整理笔记向博客,文章中的例子参考了kotlin in action这本书籍,同时我也极力推荐这本书,拥有Java基础的人可以很快的就使用kotlin来 ...

  2. ng机器学习视频笔记(二) ——梯度下降算法解释以及求解θ

    ng机器学习视频笔记(二) --梯度下降算法解释以及求解θ (转载请附上本文链接--linhxx)   一.解释梯度算法 梯度算法公式以及简化的代价函数图,如上图所示. 1)偏导数 由上图可知,在a点 ...

  3. ATS日志说明

    在ATS日志中我们经常遇到形形色色的缓存结果码,为了更清晰地认识它们,相关资料整理到这里: TCP_HIT 请求对象的一份合法拷贝被缓存,ATS将发送该对象给client TCP_MISS 请求对象未 ...

  4. NOI2001 食物链

    食物链 题目描述 动物王国中有三类动物 A,B,C,这三类动物的食物链构成了有趣的环形.A 吃 B,B 吃 C,C 吃 A. 现有 N 个动物,以 1 - N 编号.每个动物都是 A,B,C 中的一种 ...

  5. oracle case when及decode的用法

    case ... when 语句 1) CASE column_name WHEN value1 THEN resutl1,... [ ELSE result ] END select name , ...

  6. Python学习笔记(三): 收集参数

    如下代码: >>>def print_params(title,*params) print title print params >>>print_params( ...

  7. python3,进程间的通信

    本文来源于python 3.5版本的官方文档 multiprocessing模块为进程间通信提供了两种方法: 1.进程队列queue The Queue class is a near clone o ...

  8. ABP官方文档翻译 4.5 特征管理

    特征管理 介绍 关于IFeatureValueStore 特征类型 Boolean特征 Value特征 定义特征 基本特征属性 其他特征属性 特征层级 检查特征 使用RequiresFeature特性 ...

  9. BZOJ 2244: [SDOI2011]拦截导弹 [CDQ分治 树状数组]

    传送门 题意:三维最长不上升子序列以及每个元素出现在最长不上升子序列的概率 $1A$了好开心 首先需要从左右各求一遍,长度就是$F[0][i]+F[1][i]-1$,次数就是$G[0][i]*G[1] ...

  10. Nodejs的运行原理-函数回调篇

    前言 当客户端向http server 发起TCP链接时,server端会发起一系列的callback调用,这是一个逆向调用的过程:开始于libuv,终止于js代码里的callback(promise ...