PlotNeuralNet源代码链接:https://github.com/HarisIqbal88/PlotNeuralNet
网上找了很多画深度学习网络图的方法,发现这个PlotNeuralNet的颜值与实用性比较出色,只是需要进行编程,但是对于搞深度学习的人来说,问题应该不大。

先展示几张PlotNeuralNet画的效果图:


在GitHub上的源码中有所依赖软件安装步骤,本人的电脑是window10系统,需要安装两个小软件,我把链接稍微贴一下(PlotNeuralNet的GitHub页面上也有,可以去那找)。

  1. Download and install MikTeX(https://miktex.org/download),下载MikTeX软件,这是一个对文字、公式、图片进行排版能生成PDF的软件,写过英文论文的可能接触过。下载安装包,按提示进行安装即可。
  2. Download and install bash runner on Windows, recommends Git bash or
    Cygwin
    下载Git bash或者Cygwin两者之一就行。我只试了Git Bash。

软件安好了后,打开Git Bash,使用cd 命令将工作路径转到PlotNeuralNet所在的路径下。可以用 ls 看到PlotNeuralNet下的目录结构。

我们先来看一个例子:
将工作路径转到 PlotNeuralNet/pyexamples,可以看到里面有个 test_simple.py 文件。里面有个test_simple.pdf文件,是发布者上传的,你可以提前删除它。

运行命令:

bash ../tikzmake.sh test_simple

注意test_simple后不加.py后缀,等程序运行结束,可以在 PlotNeuralNet/pyexamples目录下看到新生成的test_simple.pdf文件。

!!!有时因为该文件夹下已有你要创建的文件的同名文件,这时候会报个错,并让你重新输一个名字,随便输入一个文件名,按回车即可。


这就是PlotNeuralNet自动生成的网络图。

下面的任务就是利用给的这个例子,我们来画自己的网络图,我们先整体看一下 test_simple.py 代码的内容。代码中给出了我的注释。

import sys
sys.path.append('../')
#pycore.tikzeng是发布者写的python接口,可以直接调用里面的函数来就行绘图,本博客末尾有解释
from pycore.tikzeng import *#定义自己的网络图结构
arch = ["""前三行是一个初始化的过程,以后写自己的网络图照抄上去就行"""to_head( '..' ),to_cor(),to_begin(),#添加一个卷积层conv1to_Conv("conv1", 512, 64, offset="(0,0,0)", to="(0,0,0)", height=64, depth=64, width=2 ),#添加一个池化层pool1to_Pool("pool1", offset="(0,0,0)", to="(conv1-east)"),#添加一个卷积层conv2to_Conv("conv2", 128, 64, offset="(1,0,0)", to="(pool1-east)", height=32, depth=32, width=2 ),#添加一个连接线,在pool1和conv2之间to_connection( "pool1", "conv2"), #添加一个池化层pool2to_Pool("pool2", offset="(0,0,0)", to="(conv2-east)", height=28, depth=28, width=1),#添加一个softmax层soft1to_SoftMax("soft1", 10 ,"(3,0,0)", "(pool1-east)", caption="SOFT"  ),#添加一个连接线,在pool2和soft1之间to_connection("pool2", "soft1"), #添加一个 “+” 按钮sum1to_Sum("sum1", offset="(1.5,0,0)", to="(soft1-east)", radius=2.5, opacity=0.6),#添加一个连接线,在soft1和sum1之间to_connection("soft1", "sum1"),#结束to_end()]#后面的东西在自己画图是直接粘贴过去就行
def main():namefile = str(sys.argv[0]).split('.')[0]to_generate(arch, namefile + '.tex' )if __name__ == '__main__':main()

下面对其中我认为重要的代码逐一进行一个详细的分析。

  • 有时会在网络头部加上一张图片,PlotNeuralNet中也可以做到,
    用to_input()函数。
#####################################################################
# 添加输入的图像到网络头部,使用函数to_input
# to_input(pathfile,to='(-3,0,0)', width=8, height=8, name="temp")
# pathfile--输入图片的路径,
# to="(-3,0,0)"--输入图片的坐标(x,y,z),
# width=16,height=16--图片显示时的宽和高,根据需要自己调节
# name--指名称
# 这行代码紧跟前三行的后面
#####################################################################
to_input('1.jpg',width=8, height=8),

  • 卷积层添加
#####################################################################
# 添加卷积层
# to_Conv(name,s_filer=256,n_filer=64,offset="(0,0,0)",to="(0,0,0)",width=1,height=40, depth=40, caption=" ")
# name--名称
# s_filer--卷积层图像尺寸
# n_filer--卷积层图像深度(通道数)
# s_filer、n_filer指卷积层结构的参数,并非制图时的尺寸
# offset--与前一层分别在x,y,z方向的距离
# to--在x,y,z方向的坐标,
# offset、to的在后面会深入讲,你可以自己该不同的值试验一下,找规律
# width--制图时的厚度
# height、depth--制图时的长宽
# width、height、depth指在制图时,卷积层的尺寸
# caption--备注信息
#####################################################################
to_Conv("conv1", 512, 64, offset="(0,0,0)", to="(0,0,0)", height=64, depth=64, width=2 ),

效果图

注意一下,s_filer,n_filer指的是你在图中标注的尺寸大小,width,height, depth指的是在图中图形显示的实际厚、长与深度(宽)。

添加池化层的代码和参数如下:

#####################################################################
# 添加池化层
# to_Pool(name,offset="(0,0,0)",to="(0,0,0)",width=1,height=32,depth=32,opacity=0.5,caption=" ")
# 部分参数与卷积层相同
# opacity--透明度,0-1之间
# to="(conv1-east)"--在con1层的东侧
#####################################################################
to_Pool("pool1", offset="(0,0,0)",to="(conv1-east)",width=1, height=64, depth=64,opacity=0.9),

效果图:

在这里,着重讲一下offset、to这两个参数,使用它们可以调整层对应的位置:
to–在x,y,z方向的坐标,to="(conv1-east)"–可以表示在con1层的正东侧(放在平面上理解是右边,根据个人理解吧),
通过offset的值获取偏移的距离,to的值可以体现相对于谁来进行偏移。比如:offset="(0,0,0)",to="(conv1-east)"
来看下这个代码,猜猜是什么效果:

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", 512, 64, offset="(5,0,0)", to="(0,0,0)", height=64, depth=64, width=2 ),
to_Pool("pool2", offset="(5,0,0)", to="(conv2-east)"),

这里创建了依次创建了卷积层conv1、池化层pool1、卷积层conv2、池化层pool2。
pool1在conv1的正东侧,偏移offset为0;
conv2在位置(0,0,0)(这里的坐标还没弄太明白,但是影响也不太大,等以后再进行研究一下,有大佬了解也请指点)处,相对偏移offset(5,0,0),即在x方向(水平向右为x的正方向)平移5个单位(单位是啥不太清楚);
pool2在conv2的正东侧,x方向上偏移offset为0。如下图所示:

有时候网络图并不是直线型的,需要有多尺度下采样啥的,也可以用offset来实现,举了个小例子,懂了原理后,可以自由发挥:

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", 512, 64, offset="(5,-10,0)", to="(conv1-east)", height=64, depth=64, width=2 ),
to_Pool("pool2", offset="(0,0,0)", to="(conv2-east)"),

效果图:

此外,层与层之间需要带箭头的线来连接,可以用到两个函数,比较简单:
to_connection()
to_skip()

#水平连接,参数为:起始位置、中止位置
to_connection("pool1", "conv2"),
to_connection("conv2","pool2"),
#跨连接,参数为:起始位置、中止位置,pos默认为1.25,可以自己调一调试试啥效果
to_skip(of = "pool1",to = "pool2",pos=1.25),

有了这些基本的认识,来画出一张简单的网络图来说问题就不大了。
这些函数都是在路径 :PlotNeuralNet-master\pycore下的tikzeng.py与blocks.py中,博客中未提及的函数可以从tikzeng.py与blocks.py找到,对于每个函数自己都可以试一试,熟悉熟悉就会了,还可以自己定义自己的函数,方便用来画图。

参考博客:https://blog.csdn.net/qq_43790749/article/details/110590396?spm=1001.2014.3001.5502

使用PlotNeuralNet绘制深度学习网络图相关推荐

  1. 快速入门使用tikz绘制深度学习网络图

    [GiantPandaCV导语]本文主要介绍最最最基础的tikz命令和一些绘制CNN时需要的基础的LaTeX知识,希望能在尽可能短的时间内学会并实现使用tikz这个LaTeX工具包来绘制卷积神经网络示 ...

  2. 杂谈 | 那些酷炫的深度学习网络图怎么画出来的?

    杂谈 | 那些酷炫的深度学习网络图怎么画出来的? leiphone.com2019-04-02 雷锋网 AI 科技评论按,本文作者言有三,个人公众号"有三AI",原文地址:http ...

  3. ppt画深度学习网络图

    最近开始写论文,像这样酷炫的深度学习网络图是咋画的?看了网上的一些方案,基本都是比较小众的软件,学起来比较麻烦,最后发现还是ppt好使. 1.插入正方体形状 2.调整成方片 拉动黄色点和角点,多试试, ...

  4. ppt画深度学习网络图-立体网络模块

    参考文章:ppt画深度学习网络图-a better world 一.制作立方体 1.[插入]➡[形状]➡正方体 2.调整黄色与白色的点得到想要的长宽高

  5. 【必须收藏】那些酷炫的深度学习网络图怎么画出来的?

    本文我们聊聊如何才能画出炫酷高大上的神经网络图,下面是常用的几种工具. 作者&编辑 | 言有三 1 NN-SVG 这个工具可以非常方便的画出各种类型的图,是下面这位小哥哥开发的,来自于麻省理工 ...

  6. 如何绘制深度学习-目标检测评估指标P-R(precision-recall)曲线?如何计算AP(average-precision)?

    参考文章:深度学习-目标检测评估指标P-R曲线.AP.mAP 文章目录 P-R曲线: AP计算: 下面通过具体例子说明. 首先用训练好的模型得到所有测试样本的confidence score,每一类( ...

  7. 酷炫的深度学习网络图怎么绘制出来的?

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文我们聊聊如何才能画出炫酷高大上的神经网络图,下面是常用的几种工 ...

  8. 深度学习网络图的绘制

    1 NN-SVG 这个工具可以非常方便的画出各种类型的图,是下面这位小哥哥开发的,来自于麻省理工学院弗兰克尔生物工程实验室, 该实验室开发可视化和机器学习工具用于分析生物数据. github地址:ht ...

  9. 那些酷炫的深度学习网络图怎么画出来的?

    本文我们聊聊如何才能画出炫酷高大上的神经网络图,下面是常用的几种工具. 作者&编辑 | 言有三 1 NN-SVG 这个工具可以非常方便的画出各种类型的图,是下面这位小哥哥开发的,来自于麻省理工 ...

最新文章

  1. 2021-05-09
  2. windows server 2008下搭建DHCP服务器
  3. 谷歌地图控件,通过扩展实现GMAP的自定义绘图系统
  4. 如何添加团队成员,并为团队成员分配访问权限(转载)
  5. myeclipse深色模式_完善深色模式的调色板
  6. 进厂打工的大学生:每天站12个小时,4年存50万
  7. MySQL基础2——表的约束
  8. 你造吗?这个属性值你写错了多少年?target=“_blank”
  9. css3如何链如外部字体,微信小程序引入外部字体总结(针对安卓加载缓慢问题)...
  10. Zend Studio 12.5.1 破解、注册码
  11. 汉字编码之GBK编码(附完整码表)
  12. CAD中怎么管理线缆CAD图层?
  13. DveC++编译[Error] ld returned 1 exit status
  14. Base64的编码(Encode)与解码(Decode)
  15. 一次ORA-3136的处理
  16. Java面试宝典_君哥讲解笔记04_java基础面试题——String s=new String(“xyz“);创建了几个String Object、equals和hashCode、hashCode(
  17. 2021年全球及中国集成电路销售及趋势分析
  18. html图片靠右浮动 文字左侧环绕,关于html:将图片浮动到右下角,文字环绕
  19. 机器学习——KMeans聚类
  20. ffmpeg-avi转mp4命令

热门文章

  1. Unigine 2.8 更新内容
  2. labview学习-状态机、事件、生产者消费者模式
  3. potian的软件开发常用工具箱
  4. redis生成自增长ID教程
  5. 网络视频直播系统开发需要用到哪方面的知识?
  6. iOS开发之内存泄漏检测工具-Leaks
  7. 带nfc 的 android 华为,目前支持NFC的手机这么多,为什么只有小米华为能覆盖这么多城市...
  8. suse 11 sp3修改系统时间
  9. 安装Anaconda3时遇到的问题
  10. nedc和epa续航里程什么意思_5分钟看懂综合工况续航、等速续航和NEDC续航指标