pytorch打印网络结构的实例


Posted in Python onAugust 19, 2019

最简单的方法当然可以直接print(net),但是这样网络比较复杂的时候效果不太好,看着比较乱;以前使用caffe的时候有一个网站可以在线生成网络框图,tensorflow可以用tensor board,keras中可以用model.summary()、或者plot_model()。pytorch没有这样的API,但是可以用代码来完成。

(1)安装环境:graphviz

conda install -n pytorch python-graphviz

或:

sudo apt-get install graphviz

或者从官网下载,按此教程。

(2)生成网络结构的代码:

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

(3)打印网络结构:

import torch 
from torch.autograd import Variable 
import torch.nn as nn 
from graphviz import Digraph
 
class CNN(nn.module):
  def __init__(self):
   ******
   def forward(self,x):
   ******
   return out
 
*****************************
def make_dot(): #复制上面的代码
*****************************
 
if __name__ == '__main__': 
  net = CNN() 
  x = Variable(torch.randn(1, 1, 1024,1024)) 
  y = net(x) 
  g = make_dot(y) 
  g.view() 
 
  params = list(net.parameters()) 
  k = 0 
  for i in params: 
    l = 1 
    print("该层的结构:" + str(list(i.size()))) 
    for j in i.size(): 
      l *= j 
    print("该层参数和:" + str(l)) 
    k = k + l 
  print("总参数数量和:" + str(k))

(4)结果展示(例如这是一个resnet block类型的网络):

pytorch打印网络结构的实例

以上这篇pytorch打印网络结构的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python生成器的使用方法
Nov 21 Python
Python的print用法示例
Feb 11 Python
python基础教程之面向对象的一些概念
Aug 29 Python
Python 的 Socket 编程
Mar 24 Python
详解Python中的__getitem__方法与slice对象的切片操作
Jun 27 Python
PyQt5实现无边框窗口的标题拖动和窗口缩放
Apr 19 Python
python实现批量文件重命名
Oct 31 Python
在pycharm中为项目导入anacodna环境的操作方法
Feb 12 Python
python GUI库图形界面开发之PyQt5开发环境配置与基础使用
Feb 25 Python
TensorFlow2.1.0最新版本安装详细教程
Apr 08 Python
tensorflow中tf.reduce_mean函数的使用
Apr 19 Python
Python如何实现的二分查找算法
May 27 Python
pytorch索引查找 index_select的例子
Aug 18 #Python
浅谈Pytorch中的torch.gather函数的含义
Aug 18 #Python
PyTorch中Tensor的维度变换实现
Aug 18 #Python
PyTorch中Tensor的拼接与拆分的实现
Aug 18 #Python
详解PyTorch中Tensor的高阶操作
Aug 18 #Python
浅析PyTorch中nn.Linear的使用
Aug 18 #Python
Pytorch实现GoogLeNet的方法
Aug 18 #Python
You might like
php下通过POST还是GET来传值
2008/06/05 PHP
PHP用函数嵌入网站访问量计数器
2017/10/27 PHP
php实现的支付宝网页支付功能示例【基于TP5框架】
2019/09/16 PHP
jquery 图片Silhouette Fadeins渐显效果
2010/02/07 Javascript
JavaScript 笔记二 Array和Date对象方法
2010/05/22 Javascript
JavaScript作用域与作用域链深入解析
2013/12/06 Javascript
js中的如何定位固定层的位置
2014/06/15 Javascript
5个JavaScript经典面试题
2014/10/13 Javascript
javascript类型系统 Array对象学习笔记
2016/01/09 Javascript
jquery分页插件jquery.pagination.js实现无刷新分页
2016/04/01 Javascript
jQuery实现背景弹性滚动的导航效果
2016/06/01 Javascript
JS用斜率判断鼠标进入DIV四个方向的方法
2016/11/07 Javascript
AngularJS表格样式简单设置方法示例
2017/03/03 Javascript
基于daterangepicker日历插件使用参数注意的问题
2017/08/10 Javascript
深入理解Vue nextTick 机制
2018/04/28 Javascript
js抽奖转盘实现方法分析
2020/05/16 Javascript
python连接MySQL数据库实例分析
2015/05/12 Python
Python3中在Anaconda环境下安装basemap包
2018/10/21 Python
在python 中实现运行多条shell命令
2019/01/07 Python
Python字符串逆序的实现方法【一题多解】
2019/02/18 Python
Python中remove漏删和索引越界问题的解决
2020/03/18 Python
Pyecharts 动态地图 geo()和map()的安装与用法详解
2020/03/25 Python
Kipling凯浦林美国官网:世界著名时尚休闲包袋品牌
2016/08/24 全球购物
火山动力Java笔试题
2014/06/26 面试题
秘书行业自我鉴定范文
2013/12/30 职场文书
学校介绍信范文
2014/01/14 职场文书
自荐信写法介绍
2014/01/25 职场文书
职业生涯规划书范文
2014/03/10 职场文书
2014年团委工作总结
2014/11/13 职场文书
施工员岗位职责范本
2015/04/11 职场文书
培训讲师开场白
2015/06/01 职场文书
政审证明范文
2015/06/19 职场文书
改进工作作风心得体会
2016/01/23 职场文书
解决Swagger2返回map复杂结构不能解析的问题
2021/07/02 Java/Android
彩虹社八名人气艺人全新周边限时推出,性转女装男装一次拥有!
2022/04/01 日漫
A22国内电台短波广播频率表
2022/05/10 无线电