对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中关于时间和日期函数的常用计算总结(time和datatime)
Mar 08 Python
使用Python的Supervisor进行进程监控以及自动启动
May 29 Python
跟老齐学Python之玩转字符串(2)更新篇
Sep 28 Python
Python中第三方库Requests库的高级用法详解
Mar 12 Python
Python初学时购物车程序练习实例(推荐)
Aug 08 Python
Python实现读取字符串按列分配后按行输出示例
Apr 17 Python
Python数据结构之哈夫曼树定义与使用方法示例
Apr 22 Python
python自动重试第三方包retrying模块的方法
Apr 24 Python
python 实现仿微信聊天时间格式化显示的代码
Apr 17 Python
python 中的9个实用技巧,助你提高开发效率
Aug 30 Python
基于Python的EasyGUI学习实践
May 07 Python
只用20行Python代码实现屏幕录制功能
Jun 02 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
是否存在第一台收音机的说法
2021/03/01 无线电
php中try catch捕获异常实例详解
2014/11/21 PHP
laravel中的一些简单实用功能
2018/11/03 PHP
Laravel框架搜索分页功能示例
2019/02/01 PHP
从阿里妈妈发现的几个不错的表单验证函数
2007/09/21 Javascript
javascript 面向对象编程基础 多态
2009/08/21 Javascript
jQuery的实现原理的模拟代码 -5 Ajax
2010/08/07 Javascript
js取两个数组的交集|差集|并集|补集|去重示例代码
2013/08/07 Javascript
解决Jquery load()加载GB2312页面时出现乱码的两种方案
2013/09/10 Javascript
NodeJS使用jQuery选择器操作DOM
2015/02/13 NodeJs
测试IE浏览器对JavaScript的AngularJS的兼容性
2015/06/19 Javascript
jquery实现简单实用的打分程序实例
2015/07/23 Javascript
jQuery+html5+css3实现圆角无刷新表单带输入验证功能代码
2015/08/21 Javascript
AngularJS实现Model缓存的方式
2016/02/03 Javascript
Javascript实现苹果悬浮虚拟按钮
2016/04/10 Javascript
Angular2 (RC5) 路由与导航详解
2016/09/21 Javascript
Angular多选、全选、批量选择操作实例代码
2017/03/10 Javascript
解析NodeJS异步I/O的实现
2017/04/13 NodeJs
JQuery判断正整数整理小结
2017/08/21 jQuery
使用JS组件实现带ToolTip验证框的实例代码
2017/08/23 Javascript
vue+socket.io+express+mongodb 实现简易多房间在线群聊示例
2017/10/21 Javascript
Vue实现数据请求拦截
2019/10/23 Javascript
vue 防止页面加载时看到花括号的解决操作
2020/11/09 Javascript
[05:06]TI4西雅图DOTA2前线报道 海涛密探LGD训练
2014/07/09 DOTA
Python常用内置模块之xml模块(详解)
2017/05/23 Python
Python3.5实现的三级菜单功能示例
2019/03/25 Python
详解python 模拟豆瓣登录(豆瓣6.0)
2019/04/18 Python
Python类中的魔法方法之 __slots__原理解析
2019/08/26 Python
Python制作数据预测集成工具(值得收藏)
2020/08/21 Python
Optimalprint加拿大:在线打印服务
2020/04/03 全球购物
Linux管理员面试题 Linux admin interview questions
2016/07/08 面试题
公务员职务工作的自我评价
2013/11/01 职场文书
航空大学应届生求职信
2013/11/10 职场文书
体育专业自荐书
2014/05/29 职场文书
JavaScript 中for/of,for/in 的详细介绍
2021/11/17 Javascript
SpringBoot Http远程调用的方法
2022/08/14 Java/Android