对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 字符串定义
Sep 25 Python
python搭建简易服务器分析与实现
Dec 15 Python
Python构造函数及解构函数介绍
Feb 26 Python
利用python程序帮大家清理windows垃圾
Jan 15 Python
Python MD5加密实例详解
Aug 02 Python
python matplotlib坐标轴设置的方法
Dec 05 Python
Python设计模式之门面模式简单示例
Jan 09 Python
详谈Pandas中iloc和loc以及ix的区别
Jun 08 Python
python-str,list,set间的转换实例
Jun 27 Python
Python简易版图书管理系统
Aug 12 Python
将python依赖包打包成window下可执行文件bat方式
Dec 26 Python
django 文件上传功能的相关实例代码(简单易懂)
Jan 22 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
点评山进PR-D3L三波段收音机
2021/03/02 无线电
为IP查询添加GOOGLE地图功能的代码
2010/08/08 PHP
PHP中使用xmlreader读取xml数据示例
2014/12/29 PHP
PHP模板引擎Smarty中的保留变量用法分析
2016/04/11 PHP
CentOS下搭建PHP环境与WordPress博客程序的全流程总结
2016/05/07 PHP
PHP对XML内容进行修改和删除实例代码
2016/10/26 PHP
Yii2配置Nginx伪静态的方法
2017/05/05 PHP
解决安装WampServer时提示缺少msvcr110.dll文件的问题
2017/07/09 PHP
php实现获取农历(阴历)、节日、节气的类与用法示例
2017/11/20 PHP
让新消息在网页标题闪烁提示的jQuery代码
2013/11/04 Javascript
javascript函数重载解决方案分享
2014/02/19 Javascript
js获取页面传来参数的方法
2014/09/06 Javascript
jquery获取多个checkbox的值异步提交给php
2015/07/07 Javascript
Angularjs CURD 详解及实例代码
2016/09/14 Javascript
javascript动画系列之模拟滚动条
2016/12/13 Javascript
微信小程序-获得用户输入内容
2017/02/13 Javascript
angularjs过滤器--filter与ng-repeat配合有奇效
2017/04/20 Javascript
vue-cli 自定义指令directive 添加验证滑块示例
2017/10/19 Javascript
vue配置nprogress实现页面顶部进度条
2019/09/21 Javascript
小程序实现投票进度条
2019/11/20 Javascript
[50:27]Secret vs VG 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
使用python提取html文件中的特定数据的实现代码
2013/03/24 Python
处理python中多线程与多进程中的数据共享问题
2019/07/28 Python
windows+vscode安装paddleOCR运行环境的步骤
2020/11/11 Python
手把手教你配置JupyterLab 环境的实现
2021/02/02 Python
html5 桌面提醒:Notifycations应用介绍
2012/11/27 HTML / CSS
什么是URL
2015/12/13 面试题
二年级体育教学反思
2014/01/15 职场文书
消防先进事迹材料
2014/02/10 职场文书
专题组织生活会思想汇报
2014/10/01 职场文书
导游词之澳门玫瑰圣母堂
2019/12/03 职场文书
Jupyter notebook 更改文件打开的默认路径操作
2021/05/21 Python
MySQL通过binlog恢复数据
2021/05/27 MySQL
mysql事务对效率的影响分析总结
2021/10/24 MySQL
php实现自动生成验证码的实例讲解
2021/11/17 PHP
Python使用PyYAML库读写yaml文件的方法
2022/04/06 Python