视觉:神经网络的美学可视化

visunn的Python项目详细描述


视觉:用于深度学习的神经网络的美学可视化

Visunn是一个可视化工具,它利用功能和模块化可视化来提供对神经网络体系结构的直观理解。目前,torch>=1.4.0后端受支持。在

demo gif

设置

后端和用户API在Python中(所有的pip依赖项都可以在requirements.txt中找到),并服务于由React和三.js(所有npm依赖项都可以在visunn/frontend/package.json中找到)。在

使用

以下示例将使用模型models/ThreeLayerMLP。在

pip安装

  1. 安装python包
pip install visunn
  1. 在Python脚本中初始化Visu
^{pr2}$
  1. 启动web应用
visu -l logs -n ThreeLayerMLP -p 5000

使用源

  1. 构建前端(需要npm
sh build.sh
  1. 初始化Visu
python samples/train.py -l logs -n ThreeLayerMLP
  1. 启动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.

  1. 将模型转换为protobuf(内置Pytorch函数)
  2. 将protobuf转换为dict
  3. 修剪琐碎节点
  4. 剪除平凡模块
  5. 构建模块化拓扑
ModelStep 1Step 2Step 3Step 4Step 5Space
ThreeLayerMLP0.042 s0.001 s0.000 s0.000 s0.000 s32.37 kb
ThreeLayerConvNet0.051 s0.002 s0.000 s0.000 s0.000 s35.33 kb
resnet181.282 s0.016 s0.002 s0.001 s0.002 s335.40 kb
resnet1526.819 s0.115 s0.065 s0.005 s0.013 s2.14 Mb
densenet1214.143 s0.103 s0.045 s0.008 s0.017 s1.94 Mb
densenet2017.528 s0.174 s0.125 s0.015 s0.034 s3.56 Mb
googlenet2.241 s0.046 s0.011 s0.001 s0.011 s941.52 kb
shufflenet_v2_x2_02.289 s0.070 s0.023 s0.007 s0.010 s1.07 Mb
mobilenet_v21.685 s0.045 s0.009 s0.003 s0.005 s674.06 kb
resnext101_32x8d11.744 s0.085 s0.033 s0.004 s0.009 s1.35 Mb
wide_resnet101_213.495 s0.002 s0.165 s0.007 s0.054 s1.10 Mb
mnasnet1_31.562 s0.042 s0.008 s0.003 s0.005 s658.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属性(可用于所有其他节点)。聚合属性时这些字段为空。在

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
JavaEclipseMars没有保存首选项   java梯度同步失败:原因:启动失败:   java如何从嵌套的JSON获取数据?   java如何判断可观察对象中的任何对象满足一个条件?   java将字符串转换为保持相同值的byte[]数组   java有没有办法绕过AuditingEntityListener为测试设置数据?   从/usr/share/java中解析linux JAR依赖关系   安卓 My java函数抛出nullpointerexception?   java Gradle使用正确版本的依赖项   JBoss和Java6中带注释的WebService中的web服务ClassCastException   java如何修复codename one中的简单逻辑错误?   java如何迭代矩阵的索引?   java如何在JPanel不可见时将其保存为图像?   java HashMap如何在Kotlin中实现MutableMap接口?   javascript如何在单击后加载特定片段?   EclipseJava为纳什均衡获取所有玩家/策略组合   JavaSpring:Web服务REST在JSON上产生双反斜杠   java为什么ServletContext#getRealPath(“/”)返回相对路径?   java当我的游戏应该重新启动时,我应该如何处理重置SurfaceView和线程?