pytorch Module裏的children()與modules()的區別

children()與modules()都是返回網絡模型裏的組成元素,但是children()返回的是最外層的元素,modules()返回的是所有的元素,包括不同級別的子元素。

官方論壇的回答:Module.children() vs Module.modules()

我以fmassa的舉例爲例:

m = nn.Sequential(nn.Linear(2,2), 
                  nn.ReLU(),
                 nn.Sequential(nn.Sigmoid(), nn.ReLU()))
m.children()返回的是:

[Linear(in_features=2, out_features=2), ReLU(), Sequential(
   (0): Sigmoid()
   (1): ReLU()
 )]
一共3個元素:linear,relu,sequential

m.modules()返回的是:

[Sequential(
   (0): Linear(in_features=2, out_features=2)
   (1): ReLU()
   (2): Sequential(
     (0): Sigmoid()
     (1): ReLU()
   )
 ), Linear(in_features=2, out_features=2), ReLU(), Sequential(
   (0): Sigmoid()
   (1): ReLU()
 ), Sigmoid(), ReLU()]
一共包括6個元素:整體的一個sequential,裏面的一個linear,一個relu,一個子sequential,以及sequential裏的sigmoid和relu。

用list舉例就是:

a=[1,2,[3,4]]
children返回
1,2,[3,4]
modules返回

[1,2,[3,4]], 1, 2, [3,4], 3, 4

經 @ kurumi233

提醒,modules()中重複的modules 只返回一次









發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章