对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中的深拷贝和浅拷贝详解
Jun 03 Python
Django Admin实现上传图片校验功能
Mar 06 Python
Python对列表去重的多种方法(四种方法)
Dec 05 Python
对tf.reduce_sum tensorflow维度上的操作详解
Jul 26 Python
python使用adbapi实现MySQL数据库的异步存储
Mar 19 Python
Python3 执行Linux Bash命令的方法
Jul 12 Python
解析python实现Lasso回归
Sep 11 Python
如何获取Python简单for循环索引
Nov 21 Python
django 前端页面如何实现显示前N条数据
Mar 16 Python
使用Python制作一个数据预处理小工具(多种操作一键完成)
Feb 07 Python
python ansible自动化运维工具执行流程
Jun 24 Python
Python 键盘事件详解
Nov 11 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
图象函数中的中文显示
2006/10/09 PHP
发布BlueShow v1.0 图片浏览器(类似lightbox)blueshow.js 打包下载
2007/07/21 Javascript
JQUERY THICKBOX弹出层插件
2008/08/30 Javascript
js 实现css风格选择器(压缩后2KB)
2012/01/12 Javascript
javascript设计模式之解释器模式详解
2014/06/05 Javascript
jquery进行数组遍历如何跳出当前的each循环
2014/06/05 Javascript
JavaScript驾驭网页-获取网页元素
2016/03/24 Javascript
从0开始学Vue
2016/10/27 Javascript
Javascript 正则表达式校验数字的简单实例
2016/11/02 Javascript
浅析JavaScriptSerializer类的序列化与反序列化
2016/11/22 Javascript
JQuery异步提交表单与文件上传功能示例
2017/01/12 Javascript
Angular HMR(热模块替换)功能实现方法
2018/04/04 Javascript
详解vue2.0+axios+mock+axios-mock+adapter实现登陆
2018/07/19 Javascript
Vue中axios的封装(报错、鉴权、跳转、拦截、提示)
2019/08/20 Javascript
Vue实现购物小球抛物线的方法实例
2020/11/22 Vue.js
Python enumerate遍历数组示例应用
2008/09/06 Python
Python 面向对象 成员的访问约束
2008/12/23 Python
python赋值操作方法分享
2013/03/23 Python
Python continue语句用法实例
2014/03/11 Python
python内存管理分析
2015/04/08 Python
Python使用matplotlib填充图形指定区域代码示例
2018/01/16 Python
Python程序运行原理图文解析
2018/02/10 Python
python清除函数占用的内存方法
2018/06/25 Python
Django app配置多个数据库代码实例
2019/12/17 Python
Python reversed反转序列并生成可迭代对象
2020/10/22 Python
Python的logging模块基本用法
2020/12/24 Python
HTML5 Web 存储详解
2016/09/16 HTML / CSS
前端实现弹幕效果的方法总结(包含css3和canvas的实现方式)
2018/07/12 HTML / CSS
Canvas引入跨域的图片导致toDataURL()报错的问题的解决
2018/09/19 HTML / CSS
Kidsroom台湾:来自德国的婴儿用品
2017/12/11 全球购物
3个CCIE对一个工程师的面试题
2012/05/06 面试题
城市规划毕业生求职信
2013/10/10 职场文书
自我介绍演讲稿
2014/01/15 职场文书
初中校园广播稿
2014/02/02 职场文书
消防安全责任书范本
2014/04/15 职场文书
Python进度条的使用
2021/05/17 Python