pytorch网络层结构数组化的示例分析

  介绍

这篇文章主要介绍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网络层结构数组化的示例分析