对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 相关文章推荐
Django1.7+python 2.78+pycharm配置mysql数据库
Oct 09 Python
Python爬虫实现百度图片自动下载
Feb 04 Python
python requests 库请求带有文件参数的接口实例
Jan 03 Python
pycharm+PyQt5+python最新开发环境配置(踩坑)
Feb 11 Python
解决Pycharm调用Turtle时 窗口一闪而过的问题
Feb 16 Python
使用Python制作简单的小程序IP查看器功能
Apr 16 Python
numpy中的meshgrid函数的使用
Jul 31 Python
详解Python中pyautogui库的最全使用方法
Apr 01 Python
深入浅析pycharm中 Make available to all projects的含义
Sep 15 Python
多个版本的python共存时使用pip的正确做法
Oct 26 Python
Selenium关闭INFO:CONSOLE提示的解决
Dec 07 Python
python实现简单倒计时功能
Apr 21 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生成圆角图片的方法
2015/04/07 PHP
ThinkPHP静态缓存简单配置和使用方法详解
2016/03/23 PHP
Yii2――使用数据库操作汇总(增删查改、事务)
2016/12/19 PHP
JavaScript 读取元素的CSS信息的代码
2010/02/07 Javascript
js代码实现的加入收藏效果并兼容主流浏览器
2014/06/23 Javascript
理解javascript定时器中的单线程
2016/02/23 Javascript
Javascript在IE和Firefox浏览器常见兼容性问题总结
2016/08/03 Javascript
Bootstrap基本插件学习笔记之标签切换(17)
2016/12/08 Javascript
vue构建单页面应用实战
2017/04/10 Javascript
JavaScript实现计算多边形质心的方法示例
2018/01/31 Javascript
浅谈手写node可读流之流动模式
2018/06/01 Javascript
Angular设置别名alias的方法
2018/11/08 Javascript
JS使用Prim算法和Kruskal算法实现最小生成树
2019/01/17 Javascript
js中innerText/textContent和innerHTML与target和currentTarget的区别
2019/01/21 Javascript
微信小程序中使用Async-await方法异步请求变为同步请求方法
2019/03/28 Javascript
webpack4 从零学习常用配置(小结)
2019/05/28 Javascript
[01:19:46]EG vs Secret 2019国际邀请赛淘汰赛 胜者组 BO3 第二场 8.21.mp4
2020/07/19 DOTA
Python+matplotlib实现华丽的文本框演示代码
2018/01/22 Python
通过shell+python实现企业微信预警
2019/03/07 Python
Python中zip()函数的解释和可视化(实例详解)
2020/02/16 Python
Pycharm中安装wordcloud等库失败问题及终端通过pip安装的Python库如何添加到Pycharm解释器中(推荐)
2020/05/10 Python
python正则表达式 匹配反斜杠的操作方法
2020/08/07 Python
pytorch下的unsqueeze和squeeze的用法说明
2021/02/06 Python
世界上最全面的草药补充剂和顶级品牌维生素网站:HerbsPro
2019/01/20 全球购物
女士鞋子、包包和服装在线,第一款10美元:ShoeDazzle
2019/07/26 全球购物
Deux par Deux官方网站:设计师童装
2020/01/03 全球购物
经济信息系毕业生自荐信
2014/06/02 职场文书
励志演讲稿800字
2014/08/21 职场文书
财务管理专业自荐书
2014/09/02 职场文书
现役军人家属慰问信
2015/03/24 职场文书
联欢会开场白
2015/06/01 职场文书
红与黑读书笔记
2015/06/29 职场文书
教师信息技术学习心得体会
2016/01/21 职场文书
go语言中fallthrough的用法说明
2021/05/06 Golang
详解redis在微服务领域的贡献
2021/10/16 Redis
MySQL实现用逗号进行拼接、以逗号进行分割
2022/12/24 MySQL