介绍
这篇文章主要介绍pytorch网络层结构数组化的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
最近再写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 用certain 阶段 def add_extra (branches_cfg,我还以为;阶段): ,“““ ,only add  CNN of  brancdes S ,, L 拷贝stage Ti at 从而最终获得of 净 ,:param in_channels:从而input channels ,, ,:param 阶段:size of 过滤器 ,:param branches_cfg: channels of 形象 ,返回:list of 层 ,“““ in_channels =,我=,layers [] ,for k 拷贝范围(len(阶段): 时间=padding 才能;阶段[k],//2 conv2d 才能=,nn.Conv2d (in_channels, branches_cfg [k], [k] kernel_size=阶段,,填充=填充) layers 才能+=,(conv2d, nn.ReLU(原地=True)] 时间=in_channels 才能;branches_cfg [k] 以前,return 层><强> 2然后用普通列表装载他们强>
conf_bra_list =, [] 时间=paf_bra_list [] #,param for  branch 网络 in_channels =128 for 小姐:拷贝范围(all_stage): ,if 小姐:祝辞,0: 时间=branches 才能;branches_cfg [1] 时间=conv_sz 才能;阶段[1] ,其他的: 时间=branches 才能;branches_cfg [0] conv_sz 才能;[0]=,阶段 ,conf_bra_list.append (nn.Sequential (* add_extra (in_channels,分支[0],,conv_sz))) ,paf_bra_list.append (nn.Sequential (* add_extra (in_channels,分支[1],,conv_sz))) ,in_channels 185=,<强> 3再然后,使用moduleList方法,把普通列表专成pytorch下的模块强>
#,用列表 时间=self.conf_bra nn.ModuleList (conf_bra_list) self.paf_bra =, nn.ModuleList (paf_bra_list)<强> 4最后,调用就好了强>
out_0 =, x #,从而base 变换 for k 拷贝范围(len (self.vgg)):=,,out_0  self.vgg [k] (out_0) #,local name 空间 name =,当地人() 时间=confs [] 时间=pafs [] 时间=outs [] length =, len (self.conf_bra) for 小姐:拷贝范围(长度): ,名字(& # 39;conf_ % & # 39;, %,(小姐:+,- 1),=,self.conf_bra[我](名称[& # 39;out_ % & # 39;, %,我)) ,名字(& # 39;paf_ % & # 39;, %,(小姐:+,- 1),=,self.paf_bra[我](名称[& # 39;out_ % & # 39;, %,我)) ,名字(& # 39;out_ % & # 39;, %,(小姐:+,- 1),=,torch.cat([名称[& # 39;conf_ % & # 39;, %,(小姐:+,- 1),,名字(& # 39;paf_ % & # 39;, %,(小姐:+,- 1),,out_0],, 1) ,confs.append (& # 39; conf_ % & # 39;, %,(小姐:+,- 1)) ,pafs.append (& # 39; paf_ % & # 39;, %,(小姐:+,- 1)) ,outs.append (& # 39; out_ % & # 39;, %,(小姐:+,- 1))<强> 5顺便装了一下,使用了python局部变量命名空间,当地人name=(),其实完全使用普通列表保存变量就好了,高兴就好。强>
以上是“pytorch网络层结构数组化的示例分析”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!
pytorch网络层结构数组化的示例分析