赞
踩
♚
作者:沂水寒城,CSDN博客专家,个人研究方向:机器学习、深度学习、NLP、CV
Blog: http://yishuihancheng.blog.csdn.net
对于我们算法分析人员来说,机器学习和神经网络早已不是什么新鲜内容,搭建、训练出来一个好的模型用于线上生产是必不可少的基础功能,对于业务人员或者是对于模型细节并不是很清楚或者是关注的人来说,这个就显得很抽象了,这个时候必要的可视化工作就显得很重要了,当前比较成熟的可视化工具大致包括:matplotlib、seaborn、Chaco 、pychart 、VPython 、yellowbrick等,这些是比较主流使用比较多的模块,但是对于模型结构的可是话来说显得就比较鸡肋了,这里迫切需要一些专业领域内的工具来帮助我们完成这些工作。
本文主要针对笔者自身3年的模型经验过程中使用到的比较多的工具进行总结说明,后续发现好的工具的话会持续更新本文,欢迎感兴趣的朋友留言推荐。
首先,我们来看几张成品模型的结构图片,如下所示:
上面的这些图片都是可以一键生成的,顿时觉得功能很强大的,各位在看网络结构可视化的时候有没有猜出来各个图像对应的是哪一种模型结构呢?【从上到下分别是:FCNN、LeNet、AlexNet】
想不想试试,这款神器叫【NN-SVG】在线地址和GitHub地址请见下方。赶快上手试用吧。
- 网站地址:http://alexlenail.me/NN-SVG/
-
- GitHub地址:https://github.com/alexlenail/NN-SVG
接下来我们继续看图,如下所示:
同样是支持一键式生成,优点还有支持参数自定义模型结构,比如上面这幅图片的绘制源码如下:
- 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
接下来我们继续看图,如下所示:
官方给出来的一个简单的绘图实例如下:
- 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
接下来我们继续来看图,如下所示:
个人感觉这个网络可视化工具没有特别大的创新点,主要的亮点就在于在网络的输入和输出的地方加入了输入图片和转换处理后的结果图片,视觉上更加直观了。这款工具的GitHub地址请见下方。
https://github.com/jettan/tikz_cnn
接下来我们继续看图,如下所示:
这个工具绘图给我的第一感觉就是很朴素,这个号称是完全基于Python编写的神经网络结构可视化工具,读了源码以后发现其实就是基于matplotlib做的封装,不过效果还可以的吧,毕竟比较简单嘛。这款工具的GitHub地址请见下方。感兴趣的话安装一些基础包之后就可以试用了。
https://github.com/gwding/draw_convnet
接下来我们继续看图,如下所示:
这款绘图神器一眼看去最大的印象就是模型结构图里面的参数特别的多,个人感觉比较适合学术论文或者汇报ppt里面去用,这里提供了SVG、pdf和pptx三种结果保存形式,可以根据自己的实际需要去选择。当然了这款神器还提供了一种手绘风格的网络结构可视化方法,效果图如下所示:
手绘网络结构是不是看上去还是听有意思的呢,其实将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
点击【Open Model】就可以加载模型了。官方还提供了可直接安装使用的文件,下载仓库在下方。截图如下所示:
https://github.com/lutzroeder/netron/releases/tag/v3.5.7
windows环境直接安装上述exe文件即可。
除上面介绍的比较通用性的神经网络模型结构可视化工具之外,还有一些只针对于特定库使用的模型可视化工具,比如:仅支持Caffe绘图的NetScope,在线地址在下方,效果如图所示:
http://ethereon.github.io/netscope/quickstart.html
当然,除了本文介绍的神经网络可视化工具之外还有一些比较好用的工具,但是博主本身几乎或者是极少使用到,这里就不再进行介绍了,欢迎交流。
赞 赏 作 者
Python中文社区作为一个去中心化的全球技术社区,以成为全球20万Python中文开发者的精神部落为愿景,目前覆盖各大主流媒体和协作平台,与阿里、腾讯、百度、微软、亚马逊、开源中国、CSDN等业界知名公司和技术社区建立了广泛的联系,拥有来自十多个国家和地区数万名登记会员,会员来自以工信部、清华大学、北京大学、北京邮电大学、中国人民银行、中科院、中金、华为、BAT、谷歌、微软等为代表的政府机关、科研单位、金融机构以及海内外知名公司,全平台近20万开发者关注。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。