如果你正在尋求深度學(xué)習(xí)任務(wù)設(shè)計的可視化工具,可以考慮Visual DL。類似于Tensorboard的在線可視化,支持更多的平臺。VisualDL 兼容 ONNX, 通過與 python SDK的結(jié)合,VisualDL可以兼容包括 PaddlePaddle、 Pytorch、 MXNet 等在內(nèi)的大部分主流DNN平臺。而Tensorboard目前僅適用于Tensorflow、Pytorch、MXNet等。
本文介紹其最簡單的scalar的用法, 用于展示訓(xùn)練測試的誤差趨勢。
安裝
pip install --upgrade visualdl
庫文件core.so及demo等python文件被放在site-package目錄下面。
可以不從源碼編譯,而直接使用pip下載的core.so, 但是需要使用protoc將storage.pb轉(zhuǎn)成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) # 設(shè)置此次記錄的模式標簽: train/test等 with logger.mode("train"): # 創(chuàng)建名為 'scalars/loss0' 的scalar組件 loss0 = logger.scalar("scalars/loss0") # 模擬訓(xùn)練過程中的標量數(shù)據(jù)記錄 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++中調(diào)用VisualDL,如在solver.cpp中記錄loss。編譯時鏈接到VisualDL。示例代碼在此 frcnn。
由于VisualDL靜態(tài)鏈接了特定版本的protobuf,而caffe也需要protobuf,可以修改caffe的編譯選項,取消對protobuf的動態(tài)鏈接。
在caffe1中還可以使用VisualDL的image
功能,來可視化任何tensor,或模型生成的圖片。通過使用VisualDL工具可以大大方便我們的可視化方式,不必再寫額外的腳本獨立地來做可視化。
查看board面板
visualDL --logdir
選項:
- --host 綁定地址,如ipv6本地地址
::
- --port 綁定端口
- --model_pb 指定ONNX可交換模型文件
得到的loss曲線如下: