19

实践案例:神经网络结构可视化工具大全(3年模型经验)

 4 years ago
source link: http://mp.weixin.qq.com/s?__biz=MzIzNTg3MDQyMQ%3D%3D&%3Bmid=2247486097&%3Bidx=2&%3Bsn=aed849931ef9b2ddc209b43201dfdd80
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

fmIbIbz.jpg!web

作者:沂水寒城,CSDN博客专家,个人研究方向:机器学习、深度学习、NLP、CV

Blog: http://yishuihancheng.blog.csdn.net

对于我们算法分析人员来说,机器学习和神经网络早已不是什么新鲜内容,搭建、训练出来一个好的模型用于线上生产是必不可少的基础功能,对于业务人员或者是对于模型细节并不是很清楚或者是关注的人来说,这个就显得很抽象了,这个时候必要的可视化工作就显得很重要了,当前比较成熟的可视化工具大致包括: matplotlib、seaborn、Chaco 、pychart 、VPython 、yellowbrick等,这些是比较主流使用比较多的模块,但是对于模型结构的可是话来说显得就比较鸡肋了,这里迫切需要一些专业领域内的工具来帮助我们完成这些工作。

本文主要针对笔者自身3年的模型经验过程中使用到的比较多的工具进行总结说明,后续发现好的工具的话会持续更新本文,欢迎感兴趣的朋友留言推荐。

首先,我们来看几张成品模型的结构图片,如下所示:

iEVN7fN.jpg!web

naq2eef.jpg!web

7ryiey6.png!web

QjIbeeI.png!web

q6rANv2.png!web

Zz6VFjB.png!web

JvyMv27.png!web

上面的这些图片都是可以一键生成的,顿时觉得功能很强大的,各位在看网络结构可视化的时候有没有猜出来各个图像对应的是哪一种模型结构呢? 【从上到下分别是: FCNN、LeNet、AlexNet】

想不想试试,这款神器叫【NN-SVG】在线地址和GitHub地址请见下方。 赶快上手试用吧。

网站地址:http://alexlenail.me/NN-SVG/

GitHub地址:https://github.com/alexlenail/NN-SVG

接下来我们继续看图,如下所示:

nquYVbU.png!web

ZbIzaaY.png!web

同样是支持一键式生成,优点还有支持参数自定义模型结构,比如上面这幅图片的绘制源码如下:

input(28, 28, 1)
conv(24, 24, 8)
conv(24, 24, 8)
conv(24, 24, 8)
conv(24, 24, 8)
relu(24, 24, 8)
pool(12, 12, 8)
conv(10, 10, 16)
relu(10, 10, 16)
pool(4, 4, 16)
fullyconn(1, 1, 10)
softmax(1, 1, 10)

真的是纯参数,很简洁的一个结构定义。

这款神器叫【ConvNetDraw】,在线地址和GitHub地址请见下方。 感兴趣的话就拿去试用吧。

网站地址:https://cbovar.github.io/ConvNetDraw/

GitHub地址:https://github.com/cbovar/ConvNetDraw

接下来我们继续看图,如下所示:

maaAF3j.jpg!web

nM7vQfB.jpg!web

IrU77zm.jpg!web

官方给出来的一个简单的绘图实例如下:

import sys
sys.path.append('../')
from pycore.tikzeng import *

# defined your arch
arch = [
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()

模型结构的可视化都是基于参数的输入设定直接绘制保存本地的,这款神器的绘图效果个人觉得相比上面几种来说更美观一点,不知道大家怎么看,这款神器的名字叫【PlotNeuralNet】,是一位专业科班的大神编写的,效果还是很不错的。 暂时没有提供在线体验地址,这里给出来GitHub地址请见下方。

https://github.com/HarisIqbal88/PlotNeuralNet

接下来我们继续来看图,如下所示:

NBbYBjM.jpg!webfIf2Yjm.png!webeyIriuf.jpg!web

Bva2Yff.png!web

RBBBV3v.png!web

F7nA32A.png!web

个人感觉这个网络可视化工具没有特别大的创新点,主要的亮点就在于在网络的输入和输出的地方加入了输入图片和转换处理后的结果图片,视觉上更加直观了。 这款工具的GitHub地址请见下方。

https://github.com/jettan/tikz_cnn

接下来我们继续看图,如下所示:

RVf2yyB.png!web

f6je6vU.png!web

这个工具绘图给我的第一感觉就是很朴素,这个号称是完全基于Python编写的神经网络结构可视化工具,读了源码以后发现其实就是基于matplotlib做的封装,不过效果还可以的吧,毕竟比较简单嘛。 这款工具的GitHub地址请见下方。 感兴趣的话安装一些基础包之后就可以试用了。

https://github.com/gwding/draw_convnet

接下来我们继续看图,如下所示:

jiURz2b.png!web

NrAva2m.png!web

322ERb3.png!web

BnqqAbn.png!web

这款绘图神器一眼看去最大的印象就是模型结构图里面的参数特别的多,个人感觉比较适合学术论文或者汇报ppt里面去用,这里提供了SVG、pdf和pptx三种结果保存形式,可以根据自己的实际需要去选择。 当然了这款神器还提供了一种手绘风格的网络结构可视化方法,效果图如下所示:

U3e6buz.png!web

手绘网络结构是不是看上去还是听有意思的呢,其实将matplotlib的绘图结果转化为手绘风格的绘图结果并不难的,官方给出来的一个简单的模型可视化源码如下所示:

from convnet_drawer import Model, Conv2D, MaxPooling2D, Flatten, Dense
from pptx_util import save_model_to_pptx
from matplotlib_util import save_model_to_file
model = Model(input_shape=(227, 227, 3))
model.add(Conv2D(96, (11, 11), (4, 4)))
model.add(MaxPooling2D((3, 3), strides=(2, 2)))
model.add(Conv2D(256, (5, 5), padding="same"))
model.add(MaxPooling2D((3, 3), strides=(2, 2)))
model.add(Conv2D(384, (3, 3), padding="same"))
model.add(Conv2D(384, (3, 3), padding="same"))
model.add(Conv2D(256, (3, 3), padding="same"))
model.add(MaxPooling2D((3, 3), strides=(2, 2)))
model.add(Flatten())
model.add(Dense(4096))
model.add(Dense(4096))
model.add(Dense(1000))
# save as svg file
model.save_fig("example.svg")
# save as pptx file
save_model_to_pptx(model, "example.pptx")
# save via matplotlib
save_model_to_file(model, "example.pdf")

基于keras来定义模型,整体来说还是非常简洁的。 这款神器的名字叫【convnet-drawer】,暂时还没有在线体验地址,GitHub地址请见下方。

https://github.com/yu4u/convnet-drawer

最后再给大家介绍一款绘图神器,这里就不贴图了,因为它需要你自己去导入模型,在线地址和GitHub地址在这里。 首页截图如下:

网站地址:https://lutzroeder.github.io/netron/

GitHub地址:https://github.com/lutzroeder/netron

7VrumuI.png!web

点击【Open Model】就可以加载模型了。 官方还提供了可直接安装使用的文件,下载仓库在下方。 截图如下所示:

https://github.com/lutzroeder/netron/releases/tag/v3.5.7

EjmUJr3.png!web

windows环境直接安装上述exe文件即可。

除上面介绍的比较通用性的神经网络模型结构可视化工具之外,还有一些只针对于特定库使用的模型可视化工具,比如: 仅支持Caffe绘图的NetScope,在线地址在下方,效果如图所示:

http://ethereon.github.io/netscope/quickstart.html

uaURNfA.png!web

当然,除了本文介绍的神经网络可视化工具之外还有一些比较好用的工具,但是博主本身几乎或者是极少使用到,这里就不再进行介绍了,欢迎交流。

觉得不错,点个在看呗!


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK