前言

    tensorflow,pytorch,mxnet 每一个主流的深度学习框架都提供了相对应的可视化模板,那有没有一种方法更加具有通用性呢?我们会在论文中,相关文献中看到各种神经网络可视化的图形,有平面图形,三维立体图形,觉得很美观,你一定很好奇,这是不是使用绘图软件画的,还是只是用办公软件画的?对于人工智能研究者,那就太 low 了,人工智能都搞得定,还能被几幅图像给难住?本文带你一文看尽常用的一些神经网络可视化的开源项目。

    前面已经介绍了小草最喜欢的一个可视化框架,netron,今天来看一下接下来的几种网络可视化途径吧!鉴于篇幅较多,本次为系列文章第二篇。

    1、ConvNetDraw

    这个工具可能很多人都不知道,不过如果你知道神经网络的结构,而且你能很快的写出基本的代码,那么这款软件再方便不过啦,重要的是它的绘制结果是 3D,比较好看,缺点是卷积层的颜色等比较固定,不适合进行设计。以下是有关该工具的几个有用链接。

    (1)ConvNetDraw 的 github-https://github.com/cbovar/ConvNetDraw

    (2)ConvNetDraw 在线绘图网址 -https://cbovar.github.io/ConvNetDraw/

    神经网络可视化——收集的一些常见的网络可视化方法 - 图1

    2、 draw_convnet

    这是一个 Python 工具,可以将代码转换为网络图显示出来。有关该工具的有用链接如下所示:

    raw_convnet 的 github 链接 -https://github.com/gwding/draw_convnet

    神经网络可视化——收集的一些常见的网络可视化方法 - 图2

    3、PlotNeuralNet

    这是我偶然间寻找到的工具,基于 Latex,话不多说,直接看效果你就决定要不要使用它啦。其相关链接如下所示:

    PlotNeuralNet 的 github 链接 -https://github.com/HarisIqbal88/PlotNeuralNet

    神经网络可视化——收集的一些常见的网络可视化方法 - 图3

    神经网络可视化——收集的一些常见的网络可视化方法 - 图4

    4、NN-SVG

    有关该软件的有用链接如下所示:

    (1)N-SVG 的 github 链接 -https://github.com/zfrenchee/NN-SVG

    (2)N-SVG 的在线界面 -http://alexlenail.me/NN-SVG/LeNet.html

    神经网络可视化——收集的一些常见的网络可视化方法 - 图5

    神经网络可视化——收集的一些常见的网络可视化方法 - 图6

    5、Python + Graphviz

    针对节点较多的网络,不可避免需要投入大量尽量来写重复的脚本代码。用 python 编写了一个简单的 dot 脚本生成工具(MakeNN),可以很方便的输入参数生成 nn 结构图。

    神经网络可视化——收集的一些常见的网络可视化方法 - 图7

    6、Graphviz - dot

    在 dot 里面 label 的玩法比较多,在上面看到的每个节点都是简单的一段文字,如果想要比较复杂的结构怎么办?那就通过编写代码生成吧。其对应的代码和结果如下所示。其相关的资源如下所示:

    Graphviz 的官方链接 -https://www.graphviz.org/

    神经网络可视化——收集的一些常见的网络可视化方法 - 图8

    7、 NetworkX

    一个可以用来绘制神经网络的 python 包,其相应的资源如下所示:

    1、NetworkX 文档 -https://networkx.github.io/documentation/latest/tutorial.html

    2、NetworkX 的 github-https://github.com/networkx

    1. \>>> options \= {
    2. ... 'node\_color': 'black',
    3. ... 'node\_size': 100,
    4. ... 'width': 3,
    5. ... }
    6. \>>> plt.subplot(221)
    7. <matplotlib.axes.\_subplots.AxesSubplot object at ...\>
    8. \>>> nx.draw\_random(G, \*\*options)
    9. \>>> plt.subplot(222)
    10. <matplotlib.axes.\_subplots.AxesSubplot object at ...\>
    11. \>>> nx.draw\_circular(G, \*\*options)
    12. \>>> plt.subplot(223)
    13. <matplotlib.axes.\_subplots.AxesSubplot object at ...\>
    14. \>>> nx.draw\_spectral(G, \*\*options)
    15. \>>> plt.subplot(224)
    16. <matplotlib.axes.\_subplots.AxesSubplot object at ...\>
    17. \>>> nx.draw\_shell(G, nlist\=\[range(5,10), range(5)\], \*\*options)

    神经网络可视化——收集的一些常见的网络可视化方法 - 图9

    8、 DAFT

    Daft 是一个 Python 包,它使用 matplotlib 渲染像素完美的概率图形模型,以便在期刊或互联网上发布。 使用简短的 Python 脚本和直观的模型构建语法,您可以设计定向(贝叶斯网络,有向无环图)和无向(马尔可夫随机场)模型,并将它们保存为 matplotlib 支持的任何格式(包括 PDF,PNG,EPS 和 SVG))。其相关资源如下所示:

    (1)daft 官网链接 -http://daft-pgm.org/

    (2)daft 的 github 链接 -https://github.com/dfm/daft

    https://cloud.tencent.com/developer/article/1441558