对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 ORM框架SQLAlchemy学习笔记之安装和简单查询实例
Jun 10 Python
收集的几个Python小技巧分享
Nov 22 Python
python获取一组汉字拼音首字母的方法
Jul 01 Python
100行Python代码实现自动抢火车票(附源码)
Jan 11 Python
Python温度转换实例分析
Jan 17 Python
对python修改xml文件的节点值方法详解
Dec 24 Python
python中使用ctypes调用so传参设置遇到的问题及解决方法
Jun 19 Python
Python字符串对象实现原理详解
Jul 01 Python
python实现XML解析的方法解析
Nov 16 Python
浅谈tensorflow中dataset.shuffle和dataset.batch dataset.repeat注意点
Jun 08 Python
Django自定义YamlField实现过程解析
Nov 11 Python
Pandas的数据过滤实现
Jan 15 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.ini中文版
2006/10/09 PHP
PHP面向对象概念
2011/11/06 PHP
关于PHP实现异步操作的研究
2013/02/03 PHP
wordpress自定义url参数实现路由功能的代码示例
2013/11/28 PHP
php获取淘宝分类id示例
2014/01/16 PHP
php输出xml属性的方法
2015/03/19 PHP
php简单实现短网址(短链)还原的方法(测试可用)
2016/05/09 PHP
php函数传值的引用传递注意事项分析
2016/06/25 PHP
浅谈PHP的排列组合(如输入a,b,c 输出他们的全部组合)
2017/03/14 PHP
Laravel框架集成UEditor编辑器的方法图文与实例详解
2019/04/17 PHP
浅谈JavaScript事件的属性列表
2015/03/01 Javascript
手机端点击图片放大特效PhotoSwipe.js插件实现
2016/08/24 Javascript
手把手搭建安装基于windows的Vue.js运行环境
2017/06/12 Javascript
深入理解基于vue-cli的vuex配置
2017/07/24 Javascript
js 只比较时间大小的实例
2017/10/26 Javascript
vue通过style或者class改变样式的实例代码
2018/10/30 Javascript
JavaScript实现页面高亮操作提示和蒙板
2021/01/04 Javascript
python django集成cas验证系统
2014/07/14 Python
跟老齐学Python之Import 模块
2014/10/13 Python
python 删除列表里所有空格项的方法总结
2018/04/18 Python
在cmd命令行里进入和退出Python程序的方法
2018/05/12 Python
pandas中去除指定字符的实例
2018/05/18 Python
Windows下安装Scrapy
2018/10/17 Python
Django框架之DRF 基于mixins来封装的视图详解
2019/07/23 Python
python基于event实现线程间通信控制
2020/01/13 Python
python图片剪裁代码(图片按四个点坐标剪裁)
2020/03/10 Python
JetBrains PyCharm(Community版本)的下载、安装和初步使用图文教程详解
2020/03/19 Python
matplotlib绘制正余弦曲线图的实现
2021/02/22 Python
解除劳动合同协议书范本2014
2014/09/25 职场文书
廉洁自律承诺书2015
2015/01/22 职场文书
医学生自荐信范文
2015/03/05 职场文书
2015年共青团工作总结
2015/05/15 职场文书
《秦兵马俑》教学反思
2016/02/24 职场文书
如何利用pygame实现打飞机小游戏
2021/05/30 Python
bootstrapv4轮播图去除两侧阴影及线框的方法
2022/02/15 HTML / CSS
《仙剑客栈2》第一弹正式宣传片公开 年内发售
2022/04/07 其他游戏