pytorch使用(三)网络结构可视化_贪泉觉爽的博客-程序员秘密_pytorch可视化网络结构

技术标签: 深度学习  pytorch  

pytorch使用:目录


pytorch使用(三)网络结构可视化

在实际使用时,可视化网络会对调试很有帮助,借助GitHub上一位大神的代码,可以实现pytorch上网络结构的可视化:
- visualize.py

from graphviz import Digraph
import torch
from torch.autograd import Variable


def make_dot(var, params=None):
    """ Produces Graphviz representation of PyTorch autograd graph
    Blue nodes are the Variables that require grad, orange are Tensors
    saved for backward in torch.autograd.Function
    Args:
        var: output Variable
        params: dict of (name, Variable) to add names to node that
            require grad (TODO: make optional)
    """
    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',
                     fontsize='12',
                     ranksep='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
  • 这种方法需要安装python-graphviz:
    conda install -n pytorch python-graphviz
  • 使用方法如下:
import torch
from torch.autograd import Variable

from MyNet import MyNet
from visualize import  make_dot

x = Variable(torch.randn(1,22,224,224))#change 12 to the channel number of network input
model = MyNet()
y = model(x)
g = make_dot(y)
g.view()

可视化后的结果:
网络结构可视化

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/GYGuo95/article/details/78821617

智能推荐

IOT-OS之RT-Thread(十八)--- 如何使用MQTT 协议实现OneNET 远程监控?_paho.mqtt.embedded-c_流云IoT的博客-程序员秘密

物联网时代,我们想把周边的嵌入式设备接入Internet,依托云平台提供的各种服务,实现对嵌入式设备的远程监测和控制,甚至是远程OTA 升级等。各大云平台厂商经常谈到的“云-管/网-边-端”是什么?我们如何将本地设备接入云平台呢?以OneNET 云平台为例,平台域和设备域分别如何配置才能让设备顺利接入云平台?物联网设备接入云平台常用MQTT 协议通信,Paho-MQTT 的实现原理是怎样的?OneNET SDK的实现逻辑是怎样的?我们如何开发应用实现数据点上传、响应下发命令、远程OTA 升级等功能呢?

最大化最小化关闭窗口_xuyabao的博客-程序员秘密

最大化窗口:最大化最小化窗口: 最小化关闭窗口:关闭窗口  关闭窗口框架关闭关闭窗口框架关闭关闭窗口框架关闭无提示关闭窗口,把如下代码加入区域中 function shutwin(){closes.Click();return;} 关闭本窗口 简单的无提示关闭窗口代码: value="IE6最简单的无提示关闭窗口" >  

输入十个整数,将它们按从小到大的顺序排列并输出。C语言冒泡排序法。_输入十个数按从小到大排序_bai_lan的博客-程序员秘密

       int i,j,k,a[10];      for(i=0;i<10;i++){       scanf("%d",&a[i]);   }   for(i=0;i<10;i++){    for(j=0;j<10-i;j++){    if(a[j]>a[j+1]){    k=a[j];    a[j]=a[j+1];    a[j+1...

使用SAP API portal进行SAP SuccessFactors的API测试_successfactors api_汪子熙的博客-程序员秘密

登录api.sap.com, 根据关键字SuccessFactors找到对应的API目录:找到foundation/Platform级别的API,进入之后,选择User Management:点击Logon,以使用API控制台自带的控制功能:点击Try Out, 就可以像使用postman一样,使用这个API控制台自带的测试功能了:$filter string里可以测试这个OD...

Windows button控件(按钮控件)_seven-soft的博客-程序员秘密

按钮既是标准控件,也是子窗口,窗口类名是button。Button 控件样式以BS开头,常用的有:样式说明BS_LEFT文本居左。BS_RIGHT文本居右。BS_CENTER文本水平居中(默认为 BS_CENTER)。BS_BOTTOM文本位于按钮底部。BS_TOP文本位于按钮顶部。

随便推点

android 3d 骰子,3D 骰子 - 完美的随身小骰子 - Android 应用 - 【最美应用】_码农富哥的博客-程序员秘密

各位美友正在用着的微信提供了骰子,不过却不够专业,比如想要一次投多个或者除了 123456 以外的点数,生硬动画和简陋的外表也不能满足老手们挑剔的眼光。今天我就给各位美友推荐 Dice ,绝对是目前最专业的骰子应用,没有之一。逼真到令人感动模拟骰子的应用大家都用过,但我相信用游戏引擎做的模拟骰子应用你肯定没试过,你能相信 Dice 的开发者居然用上 Unity ,只为了达到完美的外表和手感?这逼真...

SQL向下递归&向上递归 (无限级父子查询)_Howfar丶的博客-程序员秘密

(SQL、SQLite、MySQL)递归查询、无限级查询、

MD5在线加密解密_在线md5解密_用心去追梦的博客-程序员秘密

MD5在线加密https://md5jiami.bmcx.com/MD5在线解密https://www.cmd5.com/

__builtin_clz(); __builtin_ctz(); __builtin_popcount();_doupi2008的博客-程序员秘密

GCC provides quite a lot of builtin functions. These functions are part of standard C offered by the compiler and may come in various variants as per the gcc. These are also termed as hardware speci

MySQL 时间入库问题:Incorrect datetime value: '' for column 'createTime' at row 1_Cadence_D的博客-程序员秘密

问题: 写入MySQL时  出现  Incorrect datetime value: '' for column 'createTime' at row 1 user.setCreateTime(new Date()); user.setExpireTime(new Date());解决 ://转换时间格式SimpleDateFormat simpleDate...

推荐文章

热门文章

相关标签