Caffe可视化之VisualDL
Visual DL是由 PaddlePaddle 和 ECharts 合作推出的一款深度学习可视化工具,其能够可视化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是很容易的。
- 可以使用caffe的python接口获取loss。
- 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的更多相关文章
- 【深度学习系列】PaddlePaddle可视化之VisualDL
上篇文章我们讲了如何对模型进行可视化,用的keras手动绘图输出CNN训练的中途结果,本篇文章将讲述如何用PaddlePaddle新开源的VisualDL来进行可视化.在讲VisualDL之前,我们先 ...
- Caffe实战五(Caffe可视化方法:编译matlab接口)
接上一篇文章,这里给出配置caffe后编译matlab接口的方法.(参考:<深度学习 21天实战Caffe 第16天 Caffe可视化方法>) 1.将Matlab目录更新至Caffe的Ma ...
- Caffe实战四(Caffe可视化方法)
面对一堆文件,一行行的数据,确实很难理解深度学习相关的概念,好比训练的数据.构建的网络是怎样的?今天按照书中第16天的内容实践了一翻,终于看到了所谓的深度神经网络的模样.(参考:<深度学习 21 ...
- caffe可视化模型
进入$CAFFE_ROOT/python: $ python draw_net.py ../models/bvlc_reference_caffenet/train_val.prototxt caff ...
- caffe可视化
1.画网络图 假
- caffe 笔记
caffe模块: blob:caffe中数据的封装,用于layer上流动 layer:输入层.输出层.神经网络层的抽象 net:神经网络结构,将layer层叠关联起来 solver:定义神经网络训练和 ...
- Caffe学习系列(17):模型各层数据和参数可视化
cifar10的各层数据和参数可视化 .caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1p ...
- Caffe学习系列(16):caffemodel可视化
通过前面的学习,我们已经能够正常训练各种数据了.设置好solver.prototxt后,我们可以把训练好的模型保存起来,如lenet_iter_10000.caffemodel. 训练多少次就自动保存 ...
- Caffe学习系列(13):数据可视化环境(python接口)配置
caffe程序是由c++语言写的,本身是不带数据可视化功能的.只能借助其它的库或接口,如opencv, python或matlab.大部分人使用python接口来进行可视化,因为python出了个比较 ...
随机推荐
- Bootstrap fileinput:文件上传插件的基础用法
官网地址:http://plugins.krajee.com/ 官网提供的样例:http://plugins.krajee.com/file-input/demo 基础用法一 导入核心CSS及JS文件 ...
- 面向对象_04【关键字:super使用】
super关键字:解决当子类重写父类对象方法后,子类对象无法访问父类的成员1,调用父类成员变量和方法 super.成员变量 super.成员方法([参数1,参数2.......])Example: / ...
- svn基本操作和图标介绍
注意事项: .svn这个隐藏目录记录着两项关键信息:工作文件的基准版本和一个本地副本最后更新的时间戳,千万不要手动修改或者删除这个.svn隐藏目录和里面的文件!!,否则将会导致你本地的工作拷贝( ...
- Notice!
之后的小车内容在这里更新,开源社区,新浪博客不再更新.
- window.print打印指定html元素中的内容
通常有些时候我们项目过程中使用到打印功能,而wndow.print便是系统里提供的一个函数. 但是直接使用的话,它打印的将是整个页面的所有元素,而有些时候我们又只需要打印部分内容. <body& ...
- Storm 对 0.10.x 版 Kafka之commit offsets
由于 0.10.x 版 Kafka 与 0.8.x 版有很大的变化,这种变化对下游 Storm 有非常大的影响,0.10.x 版的 Kafka 不但增加了权限管理的功能,而且还将 simple 和 h ...
- Django的思维导图
本人在学习Django的过程中整理的一些知识点 现在整理成思维导图,在以后查阅的时候可以方便自己.
- Spring MVC Mock demo
package com.niwodai.mem.web.controller; import com.alibaba.fastjson.JSON; import org.junit.Before; i ...
- MySQL修改密码的三种方法
MySQL修改密码的三种方法 1.方法1: 2.方法2: 3.方法3:
- SPOJ DIVCNT2 [我也不知道是什么分类了反正是数论]
SPOJ DIVCNT2 - Counting Divisors (square) 题意:求 \[ \sum_{i=1}^n\sigma_0(i^2) \] 好棒啊! 带着平方没法做,考虑用其他函数表 ...