如果你正在尋求深度學(xué)習(xí)任務(wù)設(shè)計(jì)的可視化工具,可以考慮Visual DL。類似于Tensorboard的在線可視化,支持更多的平臺(tái)。VisualDL 兼容 ONNX, 通過(guò)與 python SDK的結(jié)合,VisualDL可以兼容包括 PaddlePaddle、 Pytorch、 MXNet 等在內(nèi)的大部分主流DNN平臺(tái)。而Tensorboard目前僅適用于Tensorflow、Pytorch、MXNet等。
本文介紹其最簡(jiǎn)單的scalar的用法, 用于展示訓(xùn)練測(cè)試的誤差趨勢(shì)。
安裝
pip install --upgrade visualdl
庫(kù)文件core.so及demo等python文件被放在site-package目錄下面。
可以不從源碼編譯,而直接使用pip下載的core.so, 但是需要使用protoc將storage.pb轉(zhuǎn)成C++源碼文件,因?yàn)樵谑褂?code>sdk.h時(shí)會(huì)include protobuf生成的頭文件。protoc得到的protobuf頭文件版本與VisualDL編譯所使用的protobuf版本***一致(VisualDL使用的cmake版本號(hào)定義在VisualDL/cmake/external/protobuf.cmake中,如果兩個(gè)庫(kù)中使用了不同的版本,在運(yùn)行時(shí)會(huì)沖突)。
protoc storage.proto --cpp_out .
使用
Python 中記錄 Scalar 示例:
import random from visualdl import LogWriter # 指定輸出目錄,同步周期 logdir = "./log" logger = LogWriter(logdir, sync_cycle=30) # 設(shè)置此次記錄的模式標(biāo)簽: train/test等 with logger.mode("train"): # 創(chuàng)建名為 'scalars/loss0' 的scalar組件 loss0 = logger.scalar("scalars/loss0") # 模擬訓(xùn)練過(guò)程中的標(biāo)量數(shù)據(jù)記錄 for step in range(1000): loss0.add_record(step, random.random())
運(yùn)行之后會(huì)在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的大勢(shì)已去,但做一些遺留的項(xiàng)目代碼研究還是要用的。如果上述的示例能夠成功運(yùn)行,那么在caffe1中記錄loss scalar是很容易的。
- 可以使用caffe的python接口獲取loss。
- C++中調(diào)用VisualDL,如在solver.cpp中記錄loss。編譯時(shí)鏈接到VisualDL。示例代碼在此 frcnn。
由于VisualDL靜態(tài)鏈接了特定版本的protobuf,而caffe也需要protobuf,可以修改caffe的編譯選項(xiàng),取消對(duì)protobuf的動(dòng)態(tài)鏈接。
在caffe1中還可以使用VisualDL的image
功能,來(lái)可視化任何tensor,或模型生成的圖片。通過(guò)使用VisualDL工具可以大大方便我們的可視化方式,不必再寫(xiě)額外的腳本獨(dú)立地來(lái)做可視化。
查看board面板
visualDL --logdir
選項(xiàng):
- --host 綁定地址,如ipv6本地地址
::
- --port 綁定端口
- --model_pb 指定ONNX可交換模型文件
得到的loss曲線如下: