對(duì)pytorch網(wǎng)絡(luò)層結(jié)構(gòu)的數(shù)組化詳解
最近再寫openpose,它的網(wǎng)絡(luò)結(jié)構(gòu)是多階段的網(wǎng)絡(luò),所以寫網(wǎng)絡(luò)的時(shí)候很想用列表的方式,但是直接使用列表不能將網(wǎng)絡(luò)中相應(yīng)的部分放入到cuda中去。
其實(shí)這個(gè)問題很簡單的,使用moduleList就好了。
1 我先是定義了一個(gè)函數(shù),用來根據(jù)超參數(shù),建立一個(gè)基礎(chǔ)網(wǎng)絡(luò)結(jié)構(gòu)
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 最后,調(diào)用就好了
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(),其實(shí)完全使用普通列表保存變量就好了,高興就好。
以上這篇對(duì)pytorch網(wǎng)絡(luò)層結(jié)構(gòu)的數(shù)組化詳解就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python解決兩個(gè)整數(shù)相除只得到整數(shù)部分的實(shí)例
今天小編就為大家分享一篇Python解決兩個(gè)整數(shù)相除只得到整數(shù)部分的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-11-11
python實(shí)現(xiàn)從ftp上下載文件的實(shí)例方法
在本篇文章里小編給大家整理了關(guān)于python實(shí)現(xiàn)從ftp上下載文件的實(shí)例方法,需要的朋友們可以參考下。2020-07-07
python中的accumulate()函數(shù)示例詳解
accumulate 函數(shù)是Python標(biāo)準(zhǔn)庫 itertools 模塊中的一個(gè)函數(shù),用于生成累積計(jì)算的結(jié)果,這篇文章主要介紹了python中的accumulate()函數(shù),需要的朋友可以參考下2023-09-09
keras實(shí)現(xiàn)基于孿生網(wǎng)絡(luò)的圖片相似度計(jì)算方式
這篇文章主要介紹了keras實(shí)現(xiàn)基于孿生網(wǎng)絡(luò)的圖片相似度計(jì)算方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-06-06
Django ORM數(shù)據(jù)庫操作處理全面指南
本文深度探討Django ORM的概念、基礎(chǔ)使用、進(jìn)階操作以及詳細(xì)解析在實(shí)際使用中如何處理數(shù)據(jù)庫操作,同時(shí),我們還討論了模型深入理解,如何進(jìn)行CRUD操作,并且深化理解到數(shù)據(jù)庫遷移等高級(jí)主題2023-09-09
互斥鎖解決 Python 中多線程共享全局變量的問題(推薦)
這篇文章主要介紹了互斥鎖解決 Python 中多線程共享全局變量的問題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-09-09
基于Python pyecharts實(shí)現(xiàn)多種圖例代碼解析
這篇文章主要介紹了基于Python pyecharts實(shí)現(xiàn)多種圖例代碼解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08
Python分析彩票記錄并預(yù)測中獎(jiǎng)號(hào)碼過程詳解
這篇文章主要介紹了Python分析彩票記錄并預(yù)測中獎(jiǎng)號(hào)碼過程詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-07-07
Python實(shí)現(xiàn)異常值自動(dòng)檢測的案例分享
在數(shù)據(jù)分析和機(jī)器學(xué)習(xí)中,異常值的檢測是一個(gè)關(guān)鍵步驟,它有助于識(shí)別數(shù)據(jù)中的異常模式和離群點(diǎn),本文將介紹Python中異常值檢測的實(shí)戰(zhàn)案例,使用一些常見的技術(shù)和庫,為大家提供全面的示例代碼和詳細(xì)解釋2024-01-01

