如果你正在尋求深度學習任務設計的可視化工具,可以考慮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曲線如下: