pytorch學(xué)習(xí)經(jīng)驗(yàn)(四)pytorch container總結(jié)

之前對(duì)于這一方面了解較少淆九,搭網(wǎng)絡(luò)就是直接一層一層堆砌,簡單粗暴。當(dāng)然這樣做是不對(duì)的炭庙,寫出來的代碼不僅難看饲窿,集成度不高,遷移困難焕蹄,而且還容易出錯(cuò)逾雄,并且對(duì)于一些情況,簡單一層一層堆網(wǎng)絡(luò)是解決不了的擦盾。因此嘲驾,了解一下pytorch container的相關(guān)內(nèi)容還是有必要的淌哟。

1. nn.Module

這個(gè)是最常用的container迹卢,所有其他網(wǎng)絡(luò)都是這個(gè)類的繼承。我們?cè)谧约憾x一個(gè)網(wǎng)絡(luò)或者層時(shí)徒仓,就需要繼承這個(gè)類腐碱。module允許以樹結(jié)構(gòu)進(jìn)行嵌入,一個(gè)module可以包含其他module掉弛,這個(gè)module就是原有module的submodule症见。

class MyModule(nn.Module):
   def __init__(self):
        self.conv1 = nn.Conv2d(16, 32, 3, 1)
        self.conv2 = nn.Conv2d(32, 32, 3, 1)
   def forward(self, x):
         x = self.conv1(x)
         x = self.conv2(x)
         return x

上面的例子中,conv1就是MyModule的submodule殃饿。當(dāng)對(duì)MyModule的實(shí)例進(jìn)行cuda轉(zhuǎn)換時(shí)谋作,conv1作為其submodule,也會(huì)被轉(zhuǎn)換為cuda數(shù)據(jù)格式乎芳,并且遵蚜,這一過程是遞歸進(jìn)行的。這很重要奈惑,需要認(rèn)真理解吭净。如果不是nn.Module的實(shí)例,就不會(huì)被加入到計(jì)算圖中肴甸,也不會(huì)被轉(zhuǎn)換為cuda格式寂殉。今天我就趟了一個(gè)這樣的坑,模型怎么都訓(xùn)不出來原在,最后發(fā)現(xiàn)計(jì)算圖里根本沒有層友扰。

  • add_module
    除了上面的做法,也可以用add_module添加一個(gè)層到網(wǎng)絡(luò)里庶柿,這樣做的好處是可以給層命名村怪,這樣就可以直接通過層名來找到一個(gè)層了。
class MyModule(nn.Module):
   def __init__(self):
        self.add_module('conv1', nn.Conv2d(16, 32, 3, 1))
        self.add_module('conv2', nn.Conv2d(32, 32, 3, 1))
   def forward(self, x):
         x = self.conv1(x)
         x = self.conv2(x)
         return x
m = MyModule()
m1 = m.conv1

2. nn.Sequential

這個(gè)在網(wǎng)絡(luò)中的出現(xiàn)次數(shù)也比較頻繁澳泵,通過這個(gè)模塊实愚,可以將代碼寫得更密集一點(diǎn),可讀性也更強(qiáng)。sequential是一個(gè)時(shí)序模型腊敲,根據(jù)每個(gè)submodule傳入的順序?qū)懙接?jì)算圖里击喂,在forward的時(shí)候也會(huì)順序執(zhí)行。

conv1 = nn.Sequential(
     nn.Conv2d(32, 64, 3, 1),
     nn.BatchNorm2d(64),
     nn.ReLU()
)

當(dāng)然碰辅,也可以傳一個(gè)OrderedDict來構(gòu)造網(wǎng)絡(luò)懂昂。

3. nn.ModuleList

如果不想讓module按照傳入順序執(zhí)行,就可以將它們寫成一個(gè)list没宾,用下標(biāo)來進(jìn)行索引凌彬。但是哪怕是直接在init函數(shù)里定義為成員變量,最后也不會(huì)被加到計(jì)算圖里循衰,真的是很心煩铲敛。我今天就跳了一個(gè)這樣的坑,正打算自己親自寫一個(gè)類時(shí)会钝,發(fā)現(xiàn)pytorch已經(jīng)幫我們實(shí)現(xiàn)好了伐蒋,就是ModuleList。官方大法好~~
ModuleList也是繼承了Module的一個(gè)子類迁酸,可以像python list一樣用下標(biāo)索引先鱼,可以使用append和extend方法,最重要的是奸鬓,也會(huì)被加到計(jì)算圖里焙畔,總之能用就是了。

MyModule = nn.ModuleList()
MyModule.append(nn.Conv2d(32, 64, 3, 1))
MyModule.append(nn.Conv2d(32, 64, 1, 1))

m = MyModule()
x1 = m[0](x)
x2 = m[1](x)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末串远,一起剝皮案震驚了整個(gè)濱河市宏多,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌抑淫,老刑警劉巖绷落,帶你破解...
    沈念sama閱讀 206,839評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異始苇,居然都是意外死亡砌烁,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門催式,熙熙樓的掌柜王于貴愁眉苦臉地迎上來函喉,“玉大人,你說我怎么就攤上這事荣月」芎牵” “怎么了?”我有些...
    開封第一講書人閱讀 153,116評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵哺窄,是天一觀的道長捐下。 經(jīng)常有香客問我账锹,道長,這世上最難降的妖魔是什么坷襟? 我笑而不...
    開封第一講書人閱讀 55,371評(píng)論 1 279
  • 正文 為了忘掉前任奸柬,我火速辦了婚禮,結(jié)果婚禮上婴程,老公的妹妹穿的比我還像新娘廓奕。我一直安慰自己,他們只是感情好档叔,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評(píng)論 5 374
  • 文/花漫 我一把揭開白布桌粉。 她就那樣靜靜地躺著,像睡著了一般衙四。 火紅的嫁衣襯著肌膚如雪铃肯。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,111評(píng)論 1 285
  • 那天届搁,我揣著相機(jī)與錄音缘薛,去河邊找鬼窍育。 笑死卡睦,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的漱抓。 我是一名探鬼主播表锻,決...
    沈念sama閱讀 38,416評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼乞娄!你這毒婦竟也來了瞬逊?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,053評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤仪或,失蹤者是張志新(化名)和其女友劉穎确镊,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體范删,經(jīng)...
    沈念sama閱讀 43,558評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蕾域,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了到旦。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片旨巷。...
    茶點(diǎn)故事閱讀 38,117評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖添忘,靈堂內(nèi)的尸體忽然破棺而出采呐,到底是詐尸還是另有隱情,我是刑警寧澤搁骑,帶...
    沈念sama閱讀 33,756評(píng)論 4 324
  • 正文 年R本政府宣布斧吐,位于F島的核電站又固,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏煤率。R本人自食惡果不足惜口予,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望涕侈。 院中可真熱鬧沪停,春花似錦、人聲如沸裳涛。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽端三。三九已至舷礼,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間郊闯,已是汗流浹背妻献。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評(píng)論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留团赁,地道東北人育拨。 一個(gè)月前我還...
    沈念sama閱讀 45,578評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像欢摄,于是被迫代替她去往敵國和親熬丧。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容