对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爬虫
Dec 25 Python
python简单的函数定义和用法实例
May 07 Python
Python基于select实现的socket服务器
Apr 13 Python
python实现简单购物商城
May 21 Python
Python过滤txt文件内重复内容的方法
Oct 21 Python
程序员的七夕用30行代码让Python化身表白神器
Aug 07 Python
pytorch 固定部分参数训练的方法
Aug 17 Python
Python字典常见操作实例小结【定义、添加、删除、遍历】
Oct 25 Python
用python爬取历史天气数据的方法示例
Dec 30 Python
pandas实现excel中的数据透视表和Vlookup函数功能代码
Feb 14 Python
python判断是空的实例分享
Jul 06 Python
基于Python和openCV实现图像的全景拼接详细步骤
Oct 05 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将fileterms函数返回的结果变成可读的形式
2011/04/21 PHP
linux下为php添加curl扩展的方法
2011/07/29 PHP
php中取得文件的后缀名?
2012/02/20 PHP
使用Thinkphp框架开发移动端接口
2015/08/05 PHP
在PHP站点的页面上添加Facebook评论插件的实例教程
2016/01/08 PHP
php观察者模式应用场景实例详解
2017/02/03 PHP
检测是否已安装 .NET Framework 3.5的js脚本
2009/02/14 Javascript
jquery插件之信息弹出框showInfoDialog(成功/错误/警告/通知/背景遮罩)
2013/01/09 Javascript
js动态给table添加/删除tr的方法
2013/08/02 Javascript
jQuery操作CheckBox的方法介绍(选中,取消,取值)
2014/02/04 Javascript
JavaScript的作用域和块级作用域概念理解
2014/09/21 Javascript
jQuery+ajax中getJSON() 用法实例
2014/12/22 Javascript
原生JavaScript实现异步多文件上传
2015/12/02 Javascript
Bootstrap树形菜单插件TreeView.js使用方法详解
2016/11/01 Javascript
jQuery 出现Cannot read property ‘msie’ of undefined错误的解决方法
2016/11/23 Javascript
jQuery为DOM动态追加事件的方法
2017/02/16 Javascript
JS表单提交验证、input(type=number) 去三角 刷新验证码
2017/06/21 Javascript
JavaScript中while循环的基础使用教程
2020/08/11 Javascript
vue form表单post请求结合Servlet实现文件上传功能
2021/01/22 Vue.js
Python中的条件判断语句基础学习教程
2016/02/07 Python
python安装Scrapy图文教程
2017/08/14 Python
python使用邻接矩阵构造图代码示例
2017/11/10 Python
python爬虫超时的处理的实例
2018/12/19 Python
学习和使用python的13个理由
2019/07/30 Python
Python 模拟动态产生字母验证码图片功能
2019/12/24 Python
Python魔法方法 容器部方法详解
2020/01/02 Python
使用python turtle画高达
2020/01/19 Python
python GUI库图形界面开发之PyQt5控件数据拖曳Drag与Drop详细使用方法与实例
2020/02/27 Python
浅谈keras2 predict和fit_generator的坑
2020/06/17 Python
python3实现名片管理系统(控制台版)
2020/11/29 Python
玩具反斗城葡萄牙官方商城:Toys"R"Us葡萄牙
2016/10/21 全球购物
酒店执行总经理岗位职责
2013/12/15 职场文书
毕业自我评价
2014/02/05 职场文书
分享一些Java的常用工具
2021/06/11 Java/Android
MySQL 亿级数据导入导出及迁移笔记
2021/06/18 MySQL
MySQL事务的ACID特性以及并发问题方案
2022/07/15 MySQL