作为一名科研人员,也许你经常会在不同类型的论文中看到各种令人称赞的算法框图或者神经网络框图,作为一名AI从业者,你经常需要在你的论文、Poster或者Slide中添加一些神经网络框图,作为新手的我也经常遇到这个问题,但是一直并没有找到一个好的工具,很多大佬们都说利用PPT或者Visio等就能绘制成功,我的想法是这样的,尽管很多工具都能完成同样的一项工作,但是它们的效果和效率肯定是不一样的,你用Visio需要2个小时的一张图或者利用另外的一个工具仅仅需要花费20分钟,这可能就是所谓的区别,如果你感觉你的时间很多,浪费一点无所谓,请高手们绕过这篇博文。我花费了一点时间在网上找了很多有用的工具,在这里总结汇总一下,朋友们各取所好!
-
LaTeX的tikz库
作为科研人员,你可能经常需要用Latex写一些论文,那么其中有一款支持LaTex的工具tikz可以用来绘制各种各样的图,这可能是最方便的工具了。下面是有关该库的一些学习资料。
1、TikZ的官网-http://www.texample.net/tikz/
2、LateX在线编辑工具-https://www.overleaf.com
3、TikZ快速入门文档-http://cremeronline.com/LaTeX/minimaltikz.pdf -
ConvNetDraw,
这个工具可能很多人都不知道,不过如果你知道神经网络的结构,而且你能很快的写出基本的代码,那么这款软件再方便不过啦,重要的是它的绘制结果是3D,比较好看,缺点是卷积层的颜色等比较固定,不适合进行设计。以下是有关该工具的几个有用链接。
1、ConvNetDraw的github-https://github.com/cbovar/ConvNetDraw
2、ConvNetDraw在线绘图网址-https://cbovar.github.io/ConvNetDraw/ -
Visio
这个软件可能很多人都使用过,我以前所有的图基本上都是用它完成的,它的确很强大,值得去推荐,但是我总想去寻找一个更优的工具。以下是使用Visio绘制的几张神经网络图。这个软件可能很多人都使用过,我以前所有的图基本上都是用它完成的,它的确很强大,值得去推荐,但是我总想去寻找一个更优的工具。以下是使用Visio绘制的几张神经网络图。 -
Inkscape-*绘图
这个软件是一个类似Visio的软件,功能比较齐全,可以完成各种各样的图,不过我一直没有去尝试过。下面是有关该软件的一些有用链接。这个软件是一个雷士Visio的软件,功能比较齐全,可以完成各种各样的图,不过我一直没有去尝试过。下面是有关该软件的一些有用链接。
1、Inkscape官网-https://inkscape.org/zh/
2、Inkscape教程-https://inkscape.org/zh/learn/tutorials/ -
Omnigraffle
它是由The Omni Group制作的一款绘图软件,其只能于运行在Mac OS X和iPad平台之上,添加公式可以配合latexit使用。可以用来绘制图表,流程图,组织结构图以及插图,也可以用来组织头脑中思考的信息,组织头脑风暴的结果,绘制心智图,作为样式管理器,或设计网页或PDF文档的原型。嵌入在论文里导出成pdf,嵌入在网页里导出成svg。十分方便。由The Omni Group制作的一款绘图软件,其只能于运行在Mac OS X和iPad平台之上,添加公式可以配合latexit使用。可以用来绘制图表,流程图,组织结构图以及插图,也可以用来组织头脑中思考的信息,组织头脑风暴的结果,绘制心智图,作为样式管理器,或设计网页或PDF文档的原型。嵌入在论文里导出成pdf,嵌入在网页里导出成svg,十分方便。
6. draw_convnet
这是一个Python工具,可以将代码转换为网络图显示出来。有关该工具的有用链接如下所示:
1、raw_convnet的github链接-https://github.com/gwding/draw_convnet -
PlotNeuralNet
这是我偶然间寻找到的工具,基于Latex,话不多说,直接看效果你就决定要不要使用它啦。其相关链接如下所示:
1、PlotNeuralNet的github链接-https://github.com/HarisIqbal88/PlotNeuralNet -
NN-SVG
有关该软件的有用链接如下所示:
1、N-SVG的github链接-https://github.com/zfrenchee/NN-SVG
2、N-SVG的在线界面-http://alexlenail.me/NN-SVG/LeNet.html -
Python + Graphviz
针对节点较多的网络,不可避免需要投入大量尽量来写重复的脚本代码。用python编写了一个简单的dot脚本生成工具(MakeNN),可以很方便的输入参数生成nn结构图。 -
Graphviz - dot
在dot里面label的玩法比较多,在上面看到的每个节点都是简单的一段文字,如果想要比较复杂的结构怎么办?那就通过编写代码生成吧。其对应的代码和结果如下所示。其相关的资源如下所示:
1、Graphviz的官方链接-https://www.graphviz.org/
11. Keras
使用Keras框架(后端可选tensorflow或者theano),可以画出卷积神经网络的结构图。其相关资源如下所示:
1、keras英文文档-https://keras.io/
2、keras中文文档-https://keras.io/zh/
3、keras的github链接-https://github.com/keras-team/keras
from keras.layers import Input, Convolution2D, Flatten, Dense, Activationfrom keras.models import Sequentialfrom keras.optimizers import SGD , Adamfrom keras.initializations import normalfrom keras.utils.visualize_util import plot# apply a 3x3 convolution with 64 output filters on a 256x256 image:model = Sequential()
model.add(Convolution2D(64, 3, 3, border_mode='same', dim_ordering='th',input_shape=(3, 256, 256)))# now model.output_shape == (None, 64, 256, 256)# add a 3x3 convolution on top, with 32 output filters:model.add(Convolution2D(32, 3, 3, border_mode='same', dim_ordering='th'))# now model.output_shape == (None, 32, 256, 256)adam = Adam(lr=1e-6)
model.compile(loss='mse',optimizer=adam)
print("We finish building the model")
plot(model, to_file='model1.png', show_shapes=True)
Netscope是个支持prototxt格式描述的神经网络结构的在线可视工具,专门针对神经网络框架caffe而言。该工具的有用资源如下所示:
1、Netscope文档链接- https://ethereon.github.io/netscope/quickstart.html
2、Netscope的github链接-https://github.com/ethereon/netscope
3、Netscope在线链接-http://ethereon.github.io/netscope/#/editor
使用说明:直接打开相应的.prototxt文件复制到左边的黑色区域,然后按下Shift+Enter即可获得可视化结果。
13. Caffe自带绘图工具
caffe源码中的tools文件夹下面有个draw_net.py文件。Python/draw_net.py, 这个文件,就是用来绘制网络模型的。也就是将网络模型由prototxt变成一张图片。 14. TensorBoard
这个工具也好用于,可以保存好多在训练网络过程中的中间结果,同时也可以可视化整个网络的架构。其相关的有用资源如下所示:
1、tensorboard文档-https://www.tensorflow.org/guide/summaries_and_tensorboard
2、tensorboardgithub-https://github.com/tensorflow/tensorboard
15. NetworkX
一个可以用来绘制神经网络的python包,其相应的资源如下所示:
1、NetworkX文档-https://networkx.github.io/documentation/latest/tutorial.html
2、NetworkX的github-https://github.com/networkx
>>> options = {
... 'node_color': 'black',
... 'node_size': 100,
... 'width': 3,
... }
>>> plt.subplot(221)
<matplotlib.axes._subplots.AxesSubplot object at ...>
>>> nx.draw_random(G, **options)
>>> plt.subplot(222)
<matplotlib.axes._subplots.AxesSubplot object at ...>
>>> nx.draw_circular(G, **options)
>>> plt.subplot(223)
<matplotlib.axes._subplots.AxesSubplot object at ...>
>>> nx.draw_spectral(G, **options)
>>> plt.subplot(224)
<matplotlib.axes._subplots.AxesSubplot object at ...>
>>> nx.draw_shell(G, nlist=[range(5,10), range(5)], **options)
16. Bokeh
Bokeh是一个交互式可视化库,面向现代Web浏览器进行演示。 它的目标是提供优雅,简洁的多功能图形构造,并通过非常大或流数据集的高性能交互来扩展此功能。 Bokeh可以帮助任何想要快速轻松地创建交互式图表,仪表板和数据应用程序的人。其相关资源链接如下所示:
1、Bokeh官网-https://bokeh.pydata.org/en/latest/
2、Bokeh文档-https://bokeh.pydata.org/en/latest/docs/user_guide.html#userguide
17. DAFT
Daft是一个Python包,它使用matplotlib渲染像素完美的概率图形模型,以便在期刊或互联网上发布。 使用简短的Python脚本和直观的模型构建语法,您可以设计定向(贝叶斯网络,有向无环图)和无向(马尔可夫随机场)模型,并将它们保存为matplotlib支持的任何格式(包括PDF,PNG,EPS和SVG))。其相关资源如下所示:
1、daft官网链接-http://daft-pgm.org/
2、daft的github链接-https://github.com/dfm/daft
-
Netron
这是一款模型可视化神器,Netron supports ONNX (.onnx, .pb, .pbtxt), Keras (.h5, .keras), CoreML (.mlmodel), Caffe2(predict_net.pb, predict_net.pbtxt), MXNet (.model, -symbol.json) and TensorFlow Lite (.tflite). Netron has experimental support for Caffe (.caffemodel, .prototxt), PyTorch (.pth), Torch (.t7), CNTK(.model, .cntk), PaddlePaddle (model), Darknet (.cfg), scikit-learn (.pkl), TensorFlow.js(model.json, .pb) and TensorFlow (.pb, .meta, .pbtxt).你应该很惊讶吧,它就是这么厉害。有关资源如下所示:
1、Netron官网-https://electronjs.org/apps/netron
2、Netron的github-https://github.com/lutzroeder/netron
3、Netron的在线界面-https://lutzroeder.github.io/netron/
其中还有很多工具,可能我并不知道,欢迎大家提出宝贵的意见,我来将它补充完成,送人玫瑰,手有余香。大家还常用”PPT“等的其它工具我就不说啦,总之,工具的选择需要根据大家的需求,哪个工具你用起来最顺手那就是最好的,但是工具之间肯定是有效率差别的,哈哈。
注意事项
[1] 该博客是本人原创博客,如果您对该博客感兴趣,想要转载该博客,请与我联系(qq邮箱:[email protected]),我会在第一时间回复大家,谢谢大家的关注。
[2] 由于个人能力有限,该博客可能存在很多的问题,希望大家能够提出改进意见。
[3] 如果您在阅读本博客时遇到不理解的地方,希望您可以联系我,我会及时的回复您,和您交流想法和意见,谢谢。
参考资料
1、https://datascience.stackexchange.com/questions/12851/how-do-you-visualize-neural-network-architectures
2、https://datascience.stackexchange.com/questions/14899/how-to-draw-deep-learning-network-architecture-diagrams
3、https://zhuanlan.zhihu.com/p/31920000
4、https://www.quora.com/What-tools-are-good-for-drawing-neural-network-architecture-diagrams