视觉:神经网络的美学可视化
visunn的Python项目详细描述
视觉:用于深度学习的神经网络的美学可视化
Visunn是一个可视化工具,它利用功能和模块化可视化来提供对神经网络体系结构的直观理解。目前,torch>=1.4.0
后端受支持。在
设置
后端和用户API在Python中(所有的pip
依赖项都可以在requirements.txt
中找到),并服务于由React和三.js(所有npm
依赖项都可以在visunn/frontend/package.json
中找到)。在
使用
以下示例将使用模型models/ThreeLayerMLP
。在
pip安装
- 安装python包
pip install visunn
- 在Python脚本中初始化
Visu
- 启动web应用
visu -l logs -n ThreeLayerMLP -p 5000
使用源
- 构建前端(需要
npm
)
sh build.sh
- 初始化
Visu
python samples/train.py -l logs -n ThreeLayerMLP
- 启动web应用
python samples/serve.py -l logs -n ThreeLayerMLP -p 5000
指标
下面是一些样本模型的时间和空间指标,平均5次运行。这些可以通过运行python samples/debug.py
来获得,它打印创建模块化拓扑所需的5个步骤的指标(在CIFAR-10上运行):
Step 1 is the largest bottlenecks in the algorithm.
- 将模型转换为protobuf(内置Pytorch函数)
- 将protobuf转换为dict
- 修剪琐碎节点
- 剪除平凡模块
- 构建模块化拓扑
Model | Step 1 | Step 2 | Step 3 | Step 4 | Step 5 | Space |
---|---|---|---|---|---|---|
ThreeLayerMLP | 0.042 s | 0.001 s | 0.000 s | 0.000 s | 0.000 s | 32.37 kb |
ThreeLayerConvNet | 0.051 s | 0.002 s | 0.000 s | 0.000 s | 0.000 s | 35.33 kb |
resnet18 | 1.282 s | 0.016 s | 0.002 s | 0.001 s | 0.002 s | 335.40 kb |
resnet152 | 6.819 s | 0.115 s | 0.065 s | 0.005 s | 0.013 s | 2.14 Mb |
densenet121 | 4.143 s | 0.103 s | 0.045 s | 0.008 s | 0.017 s | 1.94 Mb |
densenet201 | 7.528 s | 0.174 s | 0.125 s | 0.015 s | 0.034 s | 3.56 Mb |
googlenet | 2.241 s | 0.046 s | 0.011 s | 0.001 s | 0.011 s | 941.52 kb |
shufflenet_v2_x2_0 | 2.289 s | 0.070 s | 0.023 s | 0.007 s | 0.010 s | 1.07 Mb |
mobilenet_v2 | 1.685 s | 0.045 s | 0.009 s | 0.003 s | 0.005 s | 674.06 kb |
resnext101_32x8d | 11.744 s | 0.085 s | 0.033 s | 0.004 s | 0.009 s | 1.35 Mb |
wide_resnet101_2 | 13.495 s | 0.002 s | 0.165 s | 0.007 s | 0.054 s | 1.10 Mb |
mnasnet1_3 | 1.562 s | 0.042 s | 0.008 s | 0.003 s | 0.005 s | 658.74 kb |
注释
本节专门讨论Pythorch后端带来的细微差别。在
回收层
以下ThreeLayerMLP
的变化举例说明了这个问题:
classModel(nn.Module):def__init__(self,num_classes=10,**kwargs):self.flatten=nn.Flatten(1,-1)self.linear1=nn.Linear(32*32*3,1024,bias=True)self.linear2=nn.Linear(1024,256,bias=True)self.linear3=nn.Linear(256,num_classes,bias=True)self.relu=nn.ReLU()defforward(self,x):x=self.flatten(x)x=self.linear1(x)x=self.relu(x)x=self.linear2(x)x=self.relu(x)x=self.linear3(x)returnx
请注意self.relu = nn.ReLU()
是如何被多次重用的。但这并不是不正确的。然而,从图的角度来看,有一个self.relu = ReLU()
节点,它有多个输入和输出节点。呈现此拓扑声明将在图中显示由于多次通过回收节点而导致的循环。一个包含所有未连接节点的解。在
重量和偏差
由于torch>=1.4.0
如何构造图protobuf,因此不可能从权重和偏移节点获取_output_shapes
属性(可用于所有其他节点)。聚合属性时这些字段为空。在
- 项目
标签: