# 卷积神经网络结构可视化
- 简介
- 本文介绍的工具是针对卷积神经网络示意图可视化的,不包括算图。(示意图一般出现在论文中)
- 常见的卷积神经网络示意图绘制工具不少,常用的主要有 NN SVG、ConvNetDraw、PlotNeuralNet 等。
- 写这篇重点介绍 PlotNeuralNet 的教程的原因是国内关于它的教程很少并且大都只是列举了官方 demo。
- 常见工具
- NN SVG
- [官方地址](http://alexlenail.me/NN-SVG/)
- ![](https://www.writebug.com/myres/static/uploads/2021/12/28/cf96681d299447cfaafdd9c9e5386911.writebug)
- 过去一段时间内比较喜欢用的,特点是很方便,提供给用户的是个交互式的 Web 页面。
- 特点
- 方便,各层直接界面控制增减及变化。
- 支持三种风格,选择空间大。
- 支持 SVG 格式下载。
- 缺点
- 可视化界面的最大问题就是很多用户期待的功能为考虑全面,定制程度低。
- 各层连接不是很好看。
- ConvNetDraw
- [官方地址](https://cbovar.github.io/ConvNetDraw/)
- ![](https://www.writebug.com/myres/static/uploads/2021/12/28/a1fe0d4bdc92b498b305f1f4c1f48027.writebug)
- 从未使用过,很多博主推荐,但是观感劝退了我。
- 特点
- 脚本化控制
- 尺度自定义
- 直观
- 缺点
- 既没有做到脚本化的自由度,又没有做到交互界面的观感。
- 不好看。
- PlotNeuralNet
- 官方地址
- [https://github.com/HarisIqbal88/PlotNeuralNet.git](https://github.com/HarisIqbal88/PlotNeuralNet.git)
- ![](https://www.writebug.com/myres/static/uploads/2021/12/28/b799041aaea91084982d88d095cba68c.writebug)
- 这是我极力推荐的工具,尽管它的上手难度略高于之前两个,但学会之后很好用,不少论文就是使用这个工具可视化的。
- 特点
- 脚本化,使用 LaTex 编写或者使用 Python 脚本编写结构模型,自由度高。
- 缺点
- 无交互界面,上手略有难度。
- 使用教程
- 说明
- 基于 Linux 或者有 bash 的环境,我只在 Ubuntu 系统下测试成功。(事实上,深度学习首选的环境之一就是 Linux 的 Ubuntu)
- 只介绍 Python 脚本绘制的方式,不介绍 LaTex 方式。
- 需要安装前置软件,如 LaTex 解析器。
- 前置准备
- 安装 textlive
- 调用 LaTex 解析生成 PDF,需要安装 LaTex,这里使用 TextLive。
- `wget https://mirrors.tuna.tsinghua.edu.cn/CTAN/systems/texlive/Images/texlive2019.iso`
- 上面命令为下载镜像到当前目录,失败则可能换源,去掉上述链接的最后文件,在 Web 中查看合适文件下载即可。
- `sudo apt-get install perl-tk`
- 安装图形界面
- `sudo mount -o loop texlive.iso /mnt`
- 挂载镜像
- `cd /mnt`
- 切换到挂载目录
- `sudo ./install-tl -gui`
- 使用图形界面安装
- `sudo apt-get install texlive-latex-extra`
- 安装扩展包
- 下载源码
- `git clone https://github.com/HarisIqbal88/PlotNeuralNet.git`
- 源码目录结构
- ![](https://www.writebug.com/myres/static/uploads/2021/12/28/d595c450867947251bd0b1386dd9e191.writebug)
- 其中 pycore 下的 tikzeng.py 是核心文件,定义了绘图过程(所有 to 开头的函数),可以绘制的层,py 脚本向 LaTex 的转换。
- 代码比较易懂,这里不做解析了。
- 绘制
- 一般将自己写的 py 脚本放在 clone 的项目的 pyexamples 目录下。
- 源目录下有两个 py 脚本,对其进行详细注释,包含了常用的语法。
- 代码 1-test_simple.py
- cd 到 pyexamples 目录执行 `bash ../tikzmake.sh test_simple`(**注意不加 py 后缀,且有些错误正常,观察是否生成 pdf 文件即可**)
- ```python
import sys
sys.path.append('../') # 添加自定义库的目录
from pycore.tikzeng import * # 导入自定义库
# defined your arch
arch = [
# 添加头
to_head( '..' ),
to_cor(),
to_begin(),
# 添加卷积层conv1
to_Conv("conv1", 512, 64, offset="(0,0,0)", to="(0,0,0)", height=64, depth=64, width=2 ),
# 卷积层conv1东侧添加池化层pool1
to_Pool("pool1", offset="(0,0,0)", to="(conv1-east)"),
# 池化层pool1东侧添加卷积层conv2
to_Conv("conv2", 128, 64, offset="(1,0,0)", to="(pool1-east)", height=32, depth=32, width=2 ),
# 建立pool1到conv2的连接箭头
to_connection( "pool1", "conv2"),
# conv2东侧添加pool2
to_Pool("pool2", offset="(0,0,0)", to="(conv2-east)", height=28, depth=28, width=1),
# pool1东侧添加softmax层但是偏移3单位
to_SoftMax("soft1", 10 ,"(3,0,0)", "(pool1-east)", caption="SOFT" ),
# 建立pool2到soft1的连接箭头
to_connection("pool2", "soft1"),
# 结束
to_end()
]
def main():
namefile = str(sys.argv[0]).split('.')[0]
to_generate(arch, namefile + '.tex' )
if __name__ == '__main__':
main()
```
- 执行结果
- ![](https://www.writebug.com/myres/static/uploads/2021/12/28/3b4ed8738318d88204c31dd597d5041a.writebug)
- 代码 2-unet.py
- ```python
import sys
sys.path.append('../')
from pycore.tikzeng import *
from pycore.blocks import *
arch = [
# 开头
to_head('..'),
to_cor(),
to_begin(),
# 添加输入层
to_input( '../examples/fcn8s/cats.jpg' ),
# 添加block1包含一个二重卷积接relu
to_ConvConvRelu( name='ccr_b1', s_filer=500, n_filer=(64,64), offset="(0,0,0)", to="(0,0,0)", width=(2,2), height=40, depth=40 ),
to_Pool(name="pool_b1", offset="(0,0,0)", to="(ccr_b1-east)", width=1, height=32, depth=32, opacity=0.5),
# 添加三个block,每个包含三个二卷积加一池化
*block_2ConvPool( name='b2', botton='pool_b1', top='pool_b2', s_filer=256, n_filer=128, offset="(1,0,0)", size=(32,32,3.5), opacity=0.5 ),
*block_2ConvPool( name='b3', botton='pool_b2', top='pool_b3', s_filer=128, n_filer=256, offset="(1,0,0)", size=(25,25,4.5), opacity=0.5 ),
*block_2ConvPool( name='b4', botton='pool_b3', top='pool_b4', s_filer=64, n_filer=512, offset="(1,0,0)", size=(16,16,5.5), opacity=0.5 ),
# 瓶颈,为block5
to_ConvConvRelu( name='ccr_b5', s_filer=32, n_filer=(1024,1024), offset="(2,0,0)", to="(pool_b4-east)", width=(8,8), height=8, depth=8, caption="Bottleneck" ),
to_connection( "pool_b4", "ccr_b5"),
# 解码器
# 多个block,每个为unconv
*block_Unconv( name="b6", botton="ccr_b5", top='end_b6', s_filer=64, n_filer=512, offset="(2.1,0,0)", size=(16,16,5.0), opacity=0.5 ),
to_skip( of='ccr_b4', to='ccr_res_b6', pos=1.25),
*block_Unconv( name="b7", botton="end_b6", top='end_b7', s_filer=128, n_filer=256, offset="(2.1,0,0)", size=(25,25,4.5), opacity=0.5 ),
to_skip( of='ccr_b3', to='ccr_res_b7', pos=1.25),
*block_Unconv( name="b8", botton="end_b7", top='end_b8', s_filer=256, n_filer=128, offset="(2.1,0,0)", size=(32,32,3.5), opacity=0.5 ),
to_skip( of='ccr_b2', to='ccr_res_b8', pos=1.25),
*block_Unconv( name="b9", botton="end_b8", top='end_b9', s_filer=512, n_filer=64, offset="(2.1,0,0)", size=(40,40,2.5),
shejizuopin
- 粉丝: 1w+
- 资源: 1300
最新资源
- Matlab根据flac、pfc或其他软件导出的坐标及应力、位移数据再现云图 案例包括导出在flac6.0中导出位移的fish代码(也可以自己先准备软件导出的坐标数据及对应点的位移或应力数据,可根据需
- 拳皇97.exe拳皇972.exe拳皇973.exe
- 捕鱼达人1.exe捕鱼达人2.exe捕鱼达人3.exe
- 医疗骨折摄像检测29-YOLO(v5至v9)、COCO、CreateML、Darknet、Paligemma数据集合集.rar
- ks滑块加密算法与源代码
- 医护人员检测23-YOLOv8数据集合集.rar
- 1.电力系统短路故障引起电压暂降 2.不对称短路故障分析 包括:共两份自编word+相应matlab模型 1.短路故障的发生频次以及不同类型短路故障严重程度,本文选取三类典型的不对称短路展开研究
- C#连接sap NCO组件 X64版
- 开源基于51单片机的多功能智能闹钟设计,课设毕设借鉴参考
- 深度强化学习电气工程复现文章,适合小白学习 关键词:能量管理 深度学习 强化学习 深度强化学习 能源系统 优化调度 编程语言:python平台 主题:用于能源系统优化调度的深度强化学习算法的性能比较
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈