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曲線如下: