对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中bisect的用法
Sep 23 Python
python实现发送和获取手机短信验证码
Jan 15 Python
Python实现单词翻译功能
Jun 06 Python
Python语言的变量认识及操作方法
Feb 11 Python
python: 判断tuple、list、dict是否为空的方法
Oct 22 Python
详解python selenium 爬取网易云音乐歌单名
Mar 28 Python
Python绘制热力图示例
Sep 27 Python
pyinstaller 3.6版本通过pip安装失败的解决办法(推荐)
Jan 18 Python
Python实现常见的几种加密算法(MD5,SHA-1,HMAC,DES/AES,RSA和ECC)
May 09 Python
Python decimal模块使用方法详解
Jun 08 Python
Python项目跨域问题解决方案
Jun 22 Python
Python读写yaml文件
Mar 20 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
使用Thinkphp框架开发移动端接口
2015/08/05 PHP
PHP提高编程效率的20个要点
2015/09/23 PHP
php抓取并保存网站图片的实现代码
2015/10/28 PHP
php实现网站留言板功能
2015/11/04 PHP
使用PHP uniqid函数生成唯一ID
2015/11/18 PHP
利用PHP访问MySql数据库的逻辑操作以及增删改查的实例讲解
2017/08/30 PHP
PHP设计模式之适配器模式(Adapter)原理与用法详解
2019/12/12 PHP
css图片自适应大小
2007/11/28 Javascript
随鼠标上下滚动的jquery代码
2013/12/05 Javascript
JQuery+Ajax无刷新分页的实例代码
2014/02/08 Javascript
wap浏览自动跳转到wap页面的js代码
2014/05/17 Javascript
javascript实现浏览器窗口传递参数的方法
2014/09/03 Javascript
浅谈Javascript如何实现匀速运动
2014/12/19 Javascript
JS去除iframe滚动条的方法
2015/04/01 Javascript
微信小程序中使元素占满整个屏幕高度实现方法
2016/12/14 Javascript
jQuery拖拽通过八个点改变div大小
2020/11/29 Javascript
nodejs前端自动化构建环境的搭建
2017/07/26 NodeJs
Vue.js实现大转盘抽奖总结及实现思路
2019/10/09 Javascript
JS实现滑动拼图验证功能完整示例
2020/03/29 Javascript
javascript实现点击按钮切换轮播图功能
2020/09/23 Javascript
Django中的CACHE_BACKEND参数和站点级Cache设置
2015/07/23 Python
对python中的try、except、finally 执行顺序详解
2019/02/18 Python
Python3.5迭代器与生成器用法实例分析
2019/04/30 Python
python列表,字典,元组简单用法示例
2019/07/11 Python
使用python turtle画高达
2020/01/19 Python
Python Opencv中用compareHist函数进行直方图比较对比图片
2020/04/07 Python
python读取hdfs并返回dataframe教程
2020/06/05 Python
python logging模块的使用详解
2020/10/23 Python
python如何写个俄罗斯方块
2020/11/06 Python
全球领先的全景影像品牌:Insta360
2019/08/21 全球购物
工程采购员岗位职责
2014/03/09 职场文书
cf收人广告词
2014/03/14 职场文书
2014年廉洁自律承诺书
2014/05/26 职场文书
销售会议开幕词
2015/01/28 职场文书
小学班长竞选稿
2015/11/20 职场文书
小学班主任心得体会
2016/01/07 职场文书