模型可视化

模型标题可视化

可视化工具:Graphiz、Netron、ZetaneEngine

7.2.2Graphiz可视化工具

Graphiz是一个由AT&T实验室启动的开源工具包,用于绘制DOT语言脚本描述的图形,使用它可以非常方便地对任何图形进行可视化。
Graphiz的使用步骤包括创建图,添加节点与边,渲染图,下面是一个简单的案例。

import graphviz

#创建图
dot = graphviz.Digraph(comment = 'example')

#添加节点与边
dot. node('A', 'leader')
dot. node('B', 'chargeman')
dot. node('C', 'member')
dot. node('D', 'member')

dot.edges(['AB', 'AC', 'AD', 'BC', 'BD'])

#渲染图
dot.render('test-output/team.gv', view = True)

可视化结果如图7.2所示。

模型可视化_第1张图片

下面我们使用Graphiz对模型结构进行可视化,核心代码如下:

# coding: utf8
import torch
import torch. nn as nn
import torch. nn. functional as F
from torch.autograd import Variable
import numpy as np
#使用Graphiz进行PyTorch网络结构可视化
def make_dot(var, params = None):
    #将PyTorch autograd graph生成Graphiz图
    # var:输出变量
    # params:用于添加节点的字典

    if params is not None:
        assert isinstance(params.values()[0],Variable)
        param_map =(id(v):k for k,v in params.items())
        #设置属性
        node_attr =dict (style ='filled',
                         shape ='box',
                         align ='left',
                         fontsi ze ='12',
                         rankse p ='0.1',
                         height ='0.2')
        #创建图
        dot =Digraph(node_attr=node_attr,graph_attr=dict(size="12,12"))
        seen =set()
        def size_to_str(size):
            return' ('+(',').join(['%d' %v for v in size])+')'
        #添加节点
        def add_nodes(var):
            if var not in seen:
                if torch.is_tensor(var):
                    dot.node(str(id(var)),size_to_str(var.size()),fillcolor='orange')
                elif hasattr(var,'variable'):
                    u =var.variable
                    name =param_map[id(u)]if params is not None else ''
                    node_name ='%s\n %s' %((name,size_to_str(u.size()))
                    dot.node(str(id(var)),node_name,fillcolor='lightblue')
                  else:
                     dot.node(str(id(var)),str(type(var)._name_))
                  seen.add(var)
                  if hasattr(var,'next_functions'):
                     for u in var.next_functions:
                         if u[0]is not None:
                            dot.edge(str(id(u[0])),str(id(var)))
                            add_nodes(u[0])
                         if hasattr(var,'saved_tensors'):
                            for t in var.saved_tensors:
                               dot.edge (str(id(t)),str(id(var)))
                               add_nodes(t)
        add_nodes(var.grad_fn)
        return dot
                                           
 if _name_=='_main_':
 	x =torch.randn(1,3,48,48)
    model =simpleconv3(2)
    y =model(x)
    g =make_dot(y)
    g.view()     
                                      

对上面模型结构进行可视化的结果如图7.3所示

模型可视化_第2张图片

7.2.3 Netron可视化工具

  • Netron可以可视化各大深度学习开源框架模型结构和权重的项目
  • 项目地址为https://github.com/lutzroeder/network
  • Netron支持常见的桌面操作系统,包括macOS、Linux、Windows,以及可以在网页端在线使用。

对于PyTorch模型,我们可以直接载入PT格式的权重文件进行可视化,但是更好的做法是将其先转换为ONNX 格式,转换代码如下:

import torch
from net import simpleconvs
mynet =simpleconvis(2)
mynet.load_state_dict(torch.load('mode1.pt',map_location=lambda storage,loc:storage))
mynet.train(False)
dummy_input =torch.randn((1,3,48,48))
torch.onnx.export(mynet,dummy_input,"model.onnx",verbose=False)

可视化结果如图7.4所示。
模型可视化_第3张图片

通过可视化模型结构,我们对需要训练的网络有了整体的了解,修改代码后可以查看模型结构的变化情况,从而检查是否符合设计的目的,这在训练大模型与小模型时都是非常实用的技术。

如果输入的是训练好的权重文件,则可以直接查看每一个网络层的权重,通过一键导出参数为NPY 文件,可以简单统计权重的分布。
如图7.5所示为模型的权重统计结果,横坐标表示幅值大小,纵坐标表示比例,总共分为100个bin,统计范围为-2∼2。可以看出,大部分的值都非常接近于0,这说明模型有很好的稀疏性。
模型可视化_第4张图片

网络浅层/底层 深层 越深层
学习到的特征 边缘 目标形状 语义级别的目标
感受野 越小,看到的就是越局部的信息 越大,看到的就是越全局的信息,学习到的知识越抽象

7.3 模型可视化分析

摘要:3D可视化工具ZetaneEngine,可视化网络中任何一层的特征图。特征图的展示方式比较丰富,支持二维图、三维图和数值直方图。图7.9和图7.10是可视化的例子

为了方便查看模型的参数及特征,有许多研究者都开发过相关的工具,这里介绍一个功能比较完善的工具,那就是由加拿大蒙特利尔一家公司开发的一个3D可视化工具ZetaneEngine

上传一个模型和数据,该工具可以可视化网络中任何一层的特征图,特征图的展示方式比较丰富,支持二维图、三维图和数值直方图,下面就是对上一节中ONNX格式模型的可视化界面图

图7.9展示了对输入数据的可视化结果,UserInput表示输入,可以看到,左侧图像原始大小为(RGB的三个通道分别用灰度图展示,而模型的输入张量大小为右上方展示了对所有灰度值的直方图统计,最大像素灰度值为255,最小像素灰度值为24,平均像素灰度值为155,右下方则通过伪彩色的方式显示了输入的一个通道。
模型可视化_第5张图片

图7.10展示了对卷积层特征的可视化结果,输出特征图大小为1×12×23×23,,左侧展示了平铺的一些特征图,右下方则展示了3D的视角。

模型可视化_第6张图片

参考文献:
《深度学习之图像识别 核心算法与实战案例 (全彩版)》 言有三 著
出版社:清华大学出版社
出版时间:2023年7月第一版(第一次印刷)
ISBN:978-7-302-63527-7

你可能感兴趣的:(深度学习小知识,深度学习,小知识,可视化)