对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 相关文章推荐
天翼开放平台免费短信验证码接口使用实例
Dec 18 Python
整理Python 常用string函数(收藏)
May 30 Python
python如何为被装饰的函数保留元数据
Mar 21 Python
Python 判断奇数偶数的方法
Dec 20 Python
python远程邮件控制电脑升级版
May 23 Python
Python3简单实现串口通信的方法
Jun 12 Python
python opencv 简单阈值算法的实现
Aug 04 Python
python面向对象之类属性和类方法案例分析
Dec 30 Python
python正则表达式实例代码
Mar 03 Python
python GUI库图形界面开发之PyQt5信号与槽基础使用方法与实例
Mar 06 Python
python和node.js生成当前时间戳的示例
Sep 29 Python
Python中BeautifulSoup通过查找Id获取元素信息
Dec 07 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 在线翻译函数代码
2009/05/07 PHP
php获取ip的三个属性区别介绍(HTTP_X_FORWARDED_FOR,HTTP_VIA,REMOTE_ADDR)
2012/09/23 PHP
基于php伪静态的实现详细介绍
2013/04/28 PHP
php生成二维码的几种方式整理及使用实例
2013/06/03 PHP
PHP上传文件时文件过大$_FILES为空的解决方法
2013/11/26 PHP
用PHP代替JS玩转DOM的思路及示例代码
2014/06/15 PHP
PHP记录和读取JSON格式日志文件
2016/07/07 PHP
使用Git实现Laravel项目的自动化部署
2019/11/24 PHP
javascript实现div浮动在网页最顶上并带关闭按钮效果实例
2013/08/13 Javascript
JavaScript制作简单分页插件
2016/09/11 Javascript
js以分隔符分隔数组中的元素并转换为字符串的方法
2016/11/16 Javascript
移动开发之自适应手机屏幕宽度
2016/11/23 Javascript
canvas实现爱心和彩虹雨效果
2017/03/09 Javascript
详细分析单线程JS执行问题
2017/11/22 Javascript
详解基于node.js的脚手架工具开发经历
2019/01/28 Javascript
微信小程序云开发之使用云存储
2019/05/17 Javascript
VUE 自定义组件模板的方法详解
2019/08/30 Javascript
解决node终端下运行js文件不支持ES6语法
2020/04/04 Javascript
[04:44]DOTA2西游记战队视频彩蛋流出 师徒开黑巧遇林书豪
2016/08/03 DOTA
[48:18]DOTA2-DPC中国联赛 正赛 RNG vs Dynasty BO3 第二场 1月29日
2021/03/11 DOTA
Numpy数组的保存与读取方法
2018/04/04 Python
Python之dict(或对象)与json之间的互相转化实例
2018/06/05 Python
Python实现正整数分解质因数操作示例
2018/08/01 Python
利用python循环创建多个文件的方法
2018/10/25 Python
python利用Opencv实现人脸识别功能
2019/04/25 Python
Python 微信爬虫完整实例【单线程与多线程】
2019/07/06 Python
jupyter notebook 实现matplotlib图动态刷新
2020/04/22 Python
Keras自动下载的数据集/模型存放位置介绍
2020/06/19 Python
python文件路径操作方法总结
2020/12/21 Python
意大利简约的休闲品牌:Aspesi
2018/02/08 全球购物
美国香薰蜡烛品牌:PADDYWAX
2018/10/06 全球购物
Java里面如何创建一个内部类的实例
2015/01/19 面试题
生产主管岗位职责
2013/11/10 职场文书
公务员平时考核实施方案
2014/03/11 职场文书
《巨人的花园》教学反思
2016/02/19 职场文书
多属性、多分类MySQL模式设计
2021/04/05 MySQL