对pytorch网络层结构的数组化详解


Posted in Python onDecember 08, 2018

最近再写openpose,它的网络结构是多阶段的网络,所以写网络的时候很想用列表的方式,但是直接使用列表不能将网络中相应的部分放入到cuda中去。

其实这个问题很简单的,使用moduleList就好了。

1 我先是定义了一个函数,用来根据超参数,建立一个基础网络结构

stage = [[3, 3, 3, 1, 1], [7, 7, 7, 7, 7, 1, 1]]
branches_cfg = [[[128, 128, 128, 512, 38], [128, 128, 128, 512, 19]],
    [[128, 128, 128, 128, 128, 128, 38], [128, 128, 128, 128, 128, 128, 19]]]

# used for add two branches as well as adapt to certain stage
def add_extra(i, branches_cfg, stage):
 """
 only add CNN of brancdes S & L in stage Ti at the end of net
 :param in_channels:the input channels & out
 :param stage: size of filter
 :param branches_cfg: channels of image
 :return:list of layers
 """
 in_channels = i
 layers = []
 for k in range(len(stage)):
  padding = stage[k] // 2
  conv2d = nn.Conv2d(in_channels, branches_cfg[k], kernel_size=stage[k], padding=padding)
  layers += [conv2d, nn.ReLU(inplace=True)]
  in_channels = branches_cfg[k]
 return layers

2 然后用普通列表装载他们

conf_bra_list = []
paf_bra_list = []

# param for branch network
in_channels = 128

for i in range(all_stage):
 if i > 0:
  branches = branches_cfg[1]
  conv_sz = stage[1]
 else:
  branches = branches_cfg[0]
  conv_sz = stage[0]

 conf_bra_list.append(nn.Sequential(*add_extra(in_channels, branches[0], conv_sz)))
 paf_bra_list.append(nn.Sequential(*add_extra(in_channels, branches[1], conv_sz)))
 in_channels = 185

3 再然后,使用moduleList方法,把普通列表专成pytorch下的模块

# to list
self.conf_bra = nn.ModuleList(conf_bra_list)
self.paf_bra = nn.ModuleList(paf_bra_list)

4 最后,调用就好了

out_0 = x
# the base transform
for k in range(len(self.vgg)):
 out_0 = self.vgg[k](out_0)

# local name space
name = locals()
confs = []
pafs = []
outs = []

length = len(self.conf_bra)
for i in range(length):
 name['conf_%s' % (i + 1)] = self.conf_bra[i](name['out_%s' % i])
 name['paf_%s' % (i + 1)] = self.paf_bra[i](name['out_%s' % i])
 name['out_%s' % (i + 1)] = torch.cat([name['conf_%s' % (i + 1)], name['paf_%s' % (i + 1)], out_0], 1)
 confs.append('conf_%s' % (i + 1))
 pafs.append('paf_%s' % (i + 1))
 outs.append('out_%s' % (i + 1))

5 顺便装了一下,使用了python局部变量命名空间,name = locals(),其实完全使用普通列表保存变量就好了,高兴就好。

以上这篇对pytorch网络层结构的数组化详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python中getattr函数使用方法 getattr实现工厂模式
Jan 20 Python
Python3基础之条件与循环控制实例解析
Aug 13 Python
分析在Python中何种情况下需要使用断言
Apr 01 Python
python生成IP段的方法
Jul 07 Python
pytorch 调整某一维度数据顺序的方法
Dec 08 Python
python获取服务器响应cookie的实例
Dec 28 Python
pytorch使用Variable实现线性回归
May 21 Python
Python切图九宫格的实现方法
Oct 10 Python
基于python traceback实现异常的获取与处理
Dec 13 Python
Python获取二维数组的行列数的2种方法
Feb 11 Python
教你使用pyinstaller打包Python教程
May 27 Python
手残删除python之后的补救方法
Jun 26 Python
pytorch对可变长度序列的处理方法详解
Dec 08 #Python
pytorch 转换矩阵的维数位置方法
Dec 08 #Python
pytorch 调整某一维度数据顺序的方法
Dec 08 #Python
Python操作mongodb数据库的方法详解
Dec 08 #Python
Opencv+Python 色彩通道拆分及合并的示例
Dec 08 #Python
python-opencv颜色提取分割方法
Dec 08 #Python
使用python将图片按标签分入不同文件夹的方法
Dec 08 #Python
You might like
PHP下MAIL的另一解决方案
2006/10/09 PHP
解析PHP计算页面执行时间的实现代码
2013/06/18 PHP
开源php中文分词系统SCWS安装和使用实例
2014/04/11 PHP
PHP将MySQL的查询结果转换为数组并用where拼接的示例
2016/05/13 PHP
基于JQuery的简单实现折叠菜单代码
2010/09/15 Javascript
基于jquery实现的可以编辑选择的下拉框的代码
2010/11/19 Javascript
js原型继承的两种方法对比介绍
2014/03/30 Javascript
jQuery中document与window以及load与ready 区别详解
2014/12/29 Javascript
jquery实现鼠标经过显示下划线的渐变下拉菜单效果代码
2015/08/24 Javascript
js实现拉幕效果的广告代码
2015/09/02 Javascript
JavaScript中动态向表格添加数据
2017/01/24 Javascript
详解angular element()方法使用
2017/04/08 Javascript
浅谈pc端rem字体设置的问题
2017/08/03 Javascript
jQuery基于cookie实现换肤功能实例
2017/10/14 jQuery
详解ES6语法之可迭代协议和迭代器协议
2018/01/13 Javascript
Vue 中的compile操作方法
2018/02/26 Javascript
浅谈Vue内置component组件的应用场景
2018/03/27 Javascript
js变量声明var使用与不使用的区别详解
2019/01/21 Javascript
vue中使用 pako.js 解密 gzip加密字符串的方法
2019/06/10 Javascript
Python常用库推荐
2016/12/04 Python
python实现隐马尔科夫模型HMM
2018/03/25 Python
Python 获取div标签中的文字实例
2018/12/20 Python
Python中使用gflags实例及原理解析
2019/12/13 Python
python实现最短路径的实例方法
2020/07/19 Python
详解python内置模块urllib
2020/09/09 Python
详解Python+Selenium+ChromeDriver的配置和问题解决
2021/01/19 Python
CSS3 倾斜的网页图片库实例教程
2009/11/14 HTML / CSS
html5使用canvas画空心圆与实心圆
2014/12/15 HTML / CSS
EJB需直接实现它的业务接口或Home接口吗,请简述理由
2016/11/23 面试题
给水排水工程专业毕业生推荐信
2013/10/28 职场文书
幼儿园教师演讲稿
2014/05/06 职场文书
产品生产计划书
2014/05/07 职场文书
五一劳动节演讲稿
2014/09/12 职场文书
小学红领巾广播稿(3篇)
2014/09/13 职场文书
写好Python代码的几条重要技巧
2021/05/21 Python
MySQL中datetime时间字段的四舍五入操作
2021/10/05 MySQL