22 款神經(jīng)網(wǎng)絡(luò)設(shè)計(jì)和可視化的工具大匯總
來(lái)源丨算法猿的成長(zhǎng)
編輯丨極市平臺(tái)
前言
深度學(xué)習(xí)領(lǐng)域,最常見(jiàn)的就是各種網(wǎng)絡(luò)模型,那么在寫論文或者文章,介紹網(wǎng)絡(luò)模型的時(shí)候,最好的辦法當(dāng)然就是展示代碼畫(huà)圖,今天介紹的 Github 項(xiàng)目,就是整理了 22 個(gè)設(shè)計(jì)和可視化網(wǎng)絡(luò)結(jié)構(gòu)的工具,其地址如下:
https://github.com/ashishpatel26/Tools-to-Design-or-Visualize-Architecture-of-Neural-Network
22 款工具名稱分別是:
draw_convnet
NNSVG
PlotNeuralNet
TensorBoard
Caffe
Matlab
Keras.js
Keras-sequential-ascii
Netron
DotNet
Graphviz
Keras Visualization
Conx
ENNUI
NNet
GraphCore
Neataptic
TensorSpace
Netscope CNN Analyzer
Monial
Texample
Quiver
本文首發(fā)于我的知乎專欄:https://zhuanlan.zhihu.com/p/147462170
1. draw_convnet
Github: https://github.com/gwding/draw_convnetstar 數(shù)量:1.7k+這個(gè)工具最后一次更新是 2018 年的時(shí)候,一個(gè) python 腳本來(lái)繪制卷積神經(jīng)網(wǎng)絡(luò)的工具,效果如下所示:
2. NNSVG
網(wǎng)址:http://alexlenail.me/NN-SVG/LeNet.html這個(gè)工具有 3 種網(wǎng)絡(luò)結(jié)構(gòu)風(fēng)格,分別如下所示:LeNet 類型:
AlexNet 類型
FCNN 類型
3. PlotNeuralNet
GitHub 地址:https://github.com/HarisIqbal88/PlotNeuralNetstar 數(shù)量:8.2k+這個(gè)工具是基于 Latex 代碼實(shí)現(xiàn)的用于繪制網(wǎng)絡(luò)結(jié)構(gòu),可以看看使用例子看看這些網(wǎng)絡(luò)結(jié)構(gòu)圖是如何繪制出來(lái)的。效果如下所示:
安裝
這里給出在 Ubuntu 和 windows 兩個(gè)系統(tǒng)的安裝方式:ubuntu 16.04
sudo?apt-get?install?texlive-latex-extra
Ubuntu 18.04.2?是基于這個(gè)網(wǎng)站:https://gist.github.com/rain1024/98dd5e2c6c8c28f9ea9d,安裝命令如下:
sudo?apt-get?install?texlive-latex-basesudo?apt-get?install?texlive-fonts-recommendedsudo?apt-get?install?texlive-fonts-extrasudo?apt-get?install?texlive-latex-extra
Windows
首先下載并安裝 MikTex,下載網(wǎng)站:https://miktex.org/download
其次,下載并安裝 windows 的 bash 運(yùn)行器,推薦這兩個(gè):
Git:https://git-scm.com/download/win
Cygwin:https://www.cygwin.com/
使用例子
安裝完后就是使用,按照如下所示即可:
cd?pyexamples/bash?../tikzmake.sh?test_simple
Python 的用法如下:
先創(chuàng)建新的文件夾,并生成一個(gè)新的 python 代碼文件:
$?mkdir?my_project$?cd?my_projectvim?my_arch.py
然后在新的代碼文件 `my_arch.py` 中添加這段代碼,用于定義你的網(wǎng)絡(luò)結(jié)構(gòu),主要是不同類型網(wǎng)絡(luò)層的參數(shù),包括輸入輸出數(shù)量、卷積核數(shù)量等
import?syssys.path.append('../')from?pycore.tikzeng?import?*#?defined?your?archarch?=?[????to_head(?'..'?),????to_cor(),????to_begin(),????to_Conv("conv1",?512,?64,?offset="(0,0,0)",?to="(0,0,0)",?height=64,?depth=64,?width=2?),????to_Pool("pool1",?offset="(0,0,0)",?to="(conv1-east)"),????to_Conv("conv2",?128,?64,?offset="(1,0,0)",?to="(pool1-east)",?height=32,?depth=32,?width=2?),????to_connection(?"pool1",?"conv2"),????to_Pool("pool2",?offset="(0,0,0)",?to="(conv2-east)",?height=28,?depth=28,?width=1),????to_SoftMax("soft1",?10?,"(3,0,0)",?"(pool1-east)",?caption="SOFT"??),????to_connection("pool2",?"soft1"),????to_end()????]def?main():????namefile?=?str(sys.argv[0]).split('.')[0]????to_generate(arch,?namefile?+?'.tex'?)if?__name__?==?'__main__':????main()
最后,運(yùn)行腳本
bash?../tikzmake.sh?my_arch
4. TensorBoard
https://www.tensorflow.org/tensorboard/graphs使用過(guò) TensorFlow 的都應(yīng)該知道這個(gè)繪圖工具,TensorFlow 的可視化工具,查看網(wǎng)絡(luò)結(jié)構(gòu)、損失的變化、準(zhǔn)確率等指標(biāo)的變化情況等。網(wǎng)絡(luò)結(jié)構(gòu)的效果如下圖所示:
5. Caffe
https://github.com/BVLC/caffe/blob/master/python/caffe/draw.pyCaffe 的繪圖工具,效果如下所示:
6. Matlab
http://www.mathworks.com/help/nnet/ref/view.htmlMatlab 的繪圖工具,效果如下所示:
7. Keras.js
https://transcranial.github.io/keras-js/#/inception-v3Keras 的可視化工具,效果如下所示:
8. keras-sequential-ascii
https://github.com/stared/keras-sequential-ascii/Keras 的一個(gè)第三方庫(kù),用于對(duì)序列模型的網(wǎng)絡(luò)結(jié)構(gòu)和參數(shù)進(jìn)行檢查,直接打印出來(lái)結(jié)果,比如,VGG 16 的網(wǎng)絡(luò)結(jié)構(gòu)如下所示,每層網(wǎng)絡(luò)的參數(shù)維度,參數(shù)的數(shù)量以及占整個(gè)網(wǎng)絡(luò)參數(shù)的比例都會(huì)展示出來(lái):
安裝
通過(guò) PyPI:
pip?install?keras_sequential_ascii
直接通過(guò) github 倉(cāng)庫(kù):
pip?install?git+git://github.com/stared/keras-sequential-ascii.git
使用例子
在代碼中添加:
from?keras_sequential_ascii?import?keras2asciikeras2ascii(model)
9. Netron
https://github.com/lutzroeder/NetronStar 數(shù)量:9.7k+
簡(jiǎn)介
Netron 可以可視化神經(jīng)網(wǎng)絡(luò),深度學(xué)習(xí)和機(jī)器學(xué)習(xí)模型,目前支持的網(wǎng)絡(luò)框架包括:
ONNX:?
.onnx, .pb, .pbtxt
?文件Keras:
.h5,.keras
?文件Core ML:
.mlmodel
Caffe:
.caffemodel, .prototxt
Caffe2:
predict_net.pb, predict_net.pbtxt
Darknet:?
.cfg
MXNet:
.model, -symbol.json
ncnn:
.param
TensorFlow Lite:
.tflite
另外,Netron 也有實(shí)驗(yàn)支持這些框架:
TorchScript:?
.pt, .pth
PyTorch:
.pt, .pth
Torch:?
.t7
Arm NN:
.armnn
Barracuda:
.nn
BigDL?
.bigdl
,?.model
Chainer?:
.npz
,?.h5
CNTK?:
.model
,?.cntk
Deeplearning4j:
.zip
MediaPipe:
.pbtxt
ML.NET:
.zip
MNN:
.mnn
OpenVINO?:
.xml
PaddlePaddle?:
.zip
,?__model__
scikit-learn?:
.pkl
Tengine?:
.tmfile
TensorFlow.js?:
model.json
,?.pb
TensorFlow?:
.pb
,?.meta
,?.pbtxt
,?.ckpt
,?.index
其效果如下所示:
安裝
安裝方式,根據(jù)不同系統(tǒng),有所不一樣:macOS兩種方式,任選一種:
下載?
.dmg
?文件,地址:https://github.com/lutzroeder/netron/releases/latest運(yùn)行命令?
brew cask install netron
Linux也是兩種方式,任選其中一種:
下載?
.AppImage
?文件,下載地址:https://github.com/lutzroeder/netron/releases/latest運(yùn)行命令?
snap install netron
Windows也是兩種方式,任選其中一種:
下載?
.exe
?文件,下載地址:https://github.com/lutzroeder/netron/releases/latest運(yùn)行命令?
winget install netron
瀏覽器:瀏覽器運(yùn)行地址:https://www.lutzroeder.com/ai/netronPython 服務(wù)器:首先,運(yùn)行安裝命令?pip install netron
,然后使用方法有兩種:
命令行,運(yùn)行?
netron [文件路徑]
.py
?代碼中加入
import?netron;netron.start('文件路徑')
10. DotNet
https://github.com/martisak/dotnets這個(gè)工具是一個(gè)簡(jiǎn)單的 python 腳本,利用?Graphviz
?生成神經(jīng)網(wǎng)絡(luò)的圖片。主要參考了文章:https://tgmstat.wordpress.com/2013/06/12/draw-neural-network-diagrams-graphviz/用法如下:在 MaxOS 上:
python?dotnets.py?|?dot?-Tpng?|?open?-f?-a?/Applications/Preview.app
或者生成 PDF 文件
python?dotnets.py?|?dot?-Tpdf?>?test.pdf
其效果如下所示:
11. Graphviz
http://www.graphviz.org/教程:https://tgmstat.wordpress.com/2013/06/12/draw-neural-network-diagrams-graphviz/Graphviz
?是一個(gè)開(kāi)源的圖可視化軟件,它可以用抽象的圖形和網(wǎng)絡(luò)圖來(lái)表示結(jié)構(gòu)化信息。其效果如下所示:
12. Keras Visualization
https://keras.io/api/utils/model_plotting_utils/這是 Keras 庫(kù)中的一個(gè)功能模塊--?keras.utils.vis_utils
?提供的繪制 Keras 網(wǎng)絡(luò)模型(使用的是?graphviz
?)其效果如下所示:
13. Conx
https://conx.readthedocs.io/en/latest/index.htmlPython 的一個(gè)第三方庫(kù)?conx
?可以通過(guò)函數(shù)net.picture()
?來(lái)實(shí)現(xiàn)對(duì)帶有激活函數(shù)網(wǎng)絡(luò)的可視化,可以輸出圖片格式包括 SVG, PNG 或者是 PIL。其效果如下所示:
14. ENNUI
https://math.mit.edu/ennui/通過(guò)拖和拽相應(yīng)的圖形框來(lái)實(shí)現(xiàn)一個(gè)網(wǎng)絡(luò)結(jié)構(gòu)的可視化,下面是一個(gè)可視化 LeNet 的例子:
15. NNet
教程:https://beckmw.wordpress.com/2013/03/04/visualizing-neural-networks-from-the-nnet-package/R 工具包,簡(jiǎn)單的使用例子如下:
data(infert,?package="datasets")plot(neuralnet(case~parity+induced+spontaneous,?infert))
效果如下所示:
16. GraphCore
https://www.graphcore.ai/posts/what-does-machine-learning-look-likeGraphCore?主要是展示神經(jīng)網(wǎng)絡(luò)中操作的可視化結(jié)果,但也包括了網(wǎng)絡(luò)結(jié)構(gòu)的內(nèi)容,比如每層的網(wǎng)絡(luò)參數(shù)等。下面展示了兩個(gè)網(wǎng)絡(luò)結(jié)構(gòu)的可視化效果--AlexNet 和 ResNet50.AlexNet
ResNet50
17. Neataptic
https://wagenaartje.github.io/neataptic/Neataptic?提供了非常靈活的神經(jīng)網(wǎng)絡(luò)可視化形式
神經(jīng)元和突觸可以通過(guò)一行代碼進(jìn)行刪除;
沒(méi)有規(guī)定神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)必須包含哪些內(nèi)容
這種靈活性允許通過(guò)神經(jīng)進(jìn)化(neuro-evolution)的方式為數(shù)據(jù)集調(diào)整網(wǎng)絡(luò)結(jié)構(gòu)的形狀,并通過(guò)多線程來(lái)實(shí)現(xiàn)。其效果如下圖所示:
18. TensorSpace
https://tensorspace.org/教程:https://www.freecodecamp.org/news/tensorspace-js-a-way-to-3d-visualize-neural-networks-in-browsers-2c0afd7648a8/TensorSpace?是通過(guò) TensorFlow.js,Three.js 和 Tween.js 構(gòu)建的一個(gè)神經(jīng)網(wǎng)絡(luò)三維可視化框架。它提供了 APIs 來(lái)構(gòu)建深度學(xué)習(xí)網(wǎng)絡(luò)層,加載預(yù)訓(xùn)練模型以及在瀏覽器中就可以生成三維的可視化結(jié)構(gòu)。通過(guò)應(yīng)用它的 API 接口,可以更直觀地可視化和理解通過(guò) TensorFlow、Keras 和 TensorFlow.js 等構(gòu)建的任何預(yù)訓(xùn)練模型。效果如下圖所示:
19. Netscope CNN Analyzer
http://dgschwend.github.io/netscope/quickstart.html一款基于 web 端的可視化和分析卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)(或者是任意有向無(wú)環(huán)圖),當(dāng)前支持使用 Caffe 的 prototxt 形式。效果如下圖所示:
20. Monial
https://github.com/mlajtos/moniel計(jì)算圖的交互式表示法,展示例子如下所示,左邊是輸入,右側(cè)就是對(duì)應(yīng)結(jié)構(gòu)的可視化結(jié)果。
21. Texample
http://www.texample.net/tikz/examples/neural-network/這個(gè)工具也可以通過(guò) LaTex 來(lái)實(shí)現(xiàn)一個(gè)神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)的可視化,比如,一個(gè) LaTex 的例子:
其可視化結(jié)果如下所示:
22. Quiver
github: https://github.com/keplr-io/quiverStar 數(shù)量:1.5kKeras 的一款交互式可視化卷積特征的一個(gè)工具展示例子如下所示:
安裝方式
兩種方式,直接用?pip
pip?install?quiver_engine
或者通過(guò) GitHub 倉(cāng)庫(kù)的方式:
pip?install?git+git://github.com/keplr-io/quiver.git
使用例子
首先構(gòu)建你的 keras 模型:
model?=?Model(...)
接著通過(guò)一行代碼來(lái)發(fā)布可視化的展示板:
quiver_engine.server.launch(model,?classes=['cat','dog'],?input_folder='./imgs')
最后在剛剛設(shè)置的文件夾中就可以看到每個(gè)網(wǎng)絡(luò)層的可視化結(jié)果。如果是想在瀏覽器中查看,代碼如下:
from?quiver_engine?import?serverserver.launch(model)
默認(rèn)的地址是?localhost:5000
參考文章:
https://datascience.stackexchange.com/questions/12851/how-do-you-visualize-neural-network-architectures
https://datascience.stackexchange.com/questions/2670/visualizing-deep-neural-network-training
小結(jié)
這 22 款工具的輸出結(jié)果既有直接打印的,也有黑白圖、彩色圖、炫酷的球體可視化結(jié)果,以及三維可視化結(jié)果,基本都可以支持目前主流的深度學(xué)習(xí)框架,當(dāng)然也有的是基于特定框架,比如 keras,實(shí)現(xiàn)的對(duì)應(yīng)第三方庫(kù)??梢愿鶕?jù)需求和使用的框架來(lái)進(jìn)行選擇,相信應(yīng)該能夠滿足大部分人對(duì)可視化網(wǎng)絡(luò)結(jié)構(gòu)的需求。