看了很多教程,感觉还是PlotNeuralNet画出来的图比较好看,如下图。主要面向卷积神经网络,其他绘图工具请移步:https://zhuanlan.zhihu.com/p/148896017
需要下载的工具包括:MikTeX,Python代码编辑器(这个肯定会有的吧···),Git bash(可选),安装过程如下:
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=32, depth=32, width=3 ),
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_Sum("sum1", offset="(1.5,0,0)", to="(soft1-east)", radius=2.5, opacity=0.6),
to_connection("soft1", "sum1"),
to_end()
]
def main():
namefile = str(sys.argv[0]).split('.')[0]
to_generate(arch, namefile + '.tex' )
if __name__ == '__main__':
main()
元素(函数)解释,元素主要位于pycore模块内:
函数名 | 作用 |
---|---|
to_head | 一些初始设置比如说生成.tex文件位置 |
to_cor | 颜色设置 |
to_begin | 开始标志 |
上面三个元素都是默认的,依次放在arch列表开头就行。
函数名 | 作用 |
---|---|
to_input | 显示输入图像,比较美观 |
to_Conv | 添加一层卷积层 |
to_ConvConvRelu | 添加一层带有relu操作的卷积层 |
to_Pool | 添加一层池化层 |
to_UnPool | 添加池化层(具体怎么用没仔细看···) |
to_ConvRes | 添加一个Res操作的卷积层 |
to_ConvSoftMax | 添加带SoftMax操作的卷积层 |
to_SoftMax | 添加SoftMax操作 |
to_connection | 使用箭头连接指定的两层 |
to_skip | 跳过指定的两层 |
to_end | 结束标志 |
to_generate | 生成.tex文件 |
如果想分模块设计的话,需要用到以下函数,下面这些函数需要使用需要在前面加上*,代表其是一个位置参数
函数名 | 作用 |
---|---|
block_2ConvPool | 添加卷积池化模块 |
block_Unconv | 添加模块(没用到UnConv层···) |
block_Res | 添加Res层 |
元素(函数)的参数都是大同小异的,所以只挑几个比较常见的进行解释,参考:
参数名 | 作用 |
---|---|
name=‘conv1’ | 该层名称(并不会显示) |
s_filer=224 | 表示该层的图像大小(需要自己计算),下图中标记① |
n_filer=(64, 64) | 表示输入通道和输出通道大小(自己设定),下图中标记② |
offset="(0,0,0)" | 表示这一层与上一层分别在x,y,z上的偏移量,一般只需要调整x |
to="(0,0,0)" | 表示该层在x,y,z方向上的坐标 |
to="(pool1-east)" | 表示这一层在pool1层的右边 |
width=(2, 2) | 表示该的厚度大小(x方向,不会在图中标注出数字,影响的仅仅是视觉效果) |
height=120 | 表示该层高度大小(z方向,同上) |
depth=120 | 表示该层宽度大小(y方向,同上) |
caption=‘ConvRelu1’ | 显示该层名称,见下图③ |