【pytorch知识】Module.children() vs Module.modules()

Module.children()和Module.modules()的区别

children()与modules()都是返回网络模型里的组成模块,但是children()返回的是最外层的模块,顺序显示;
modules()返回的是所有的模块,包括不同级别的子模块,详细顺序的层层显示在1个容器sequential中;
然后接着再是如children()显示最外层的模块,子模块有容器的话,还会进一步显示容器中中的模块。
 
参考官方论坛的回答:Module.children() vs Module.modules()
 
以下举例了解具体的差别:
使用children()返回了3个模块:linear,relu,sequential,并没有进入到第二层的Sequential()容器中去如第一层一样再具体单独显示容器中的两个模块。
m = nn.Sequential(nn.Linear(2,2), 
                  nn.ReLU(),
                  nn.Sequential(nn.Sigmoid(), nn.ReLU()))

m.children()

Output:
[Linear (2 -> 2),
ReLU (),
Sequential
( (
0): Sigmoid () (1): ReLU ()
 )
]

m.modules()递归地进入网络中的所有模块,并返回所有模块;一共包括6个模块:整体的一个sequential,里面的一个linear,一个relu,一个子sequential,以及sequential里的sigmoid和relu。

m.modules()

Output:
[Sequential
( (
0): Linear (2 -> 2) (1): ReLU () (2): Sequential ( (0): Sigmoid () (1): ReLU () ) ),
  Linear (
2 -> 2),
ReLU (),
Sequential
  (   (
0): Sigmoid ()   (1): ReLU ()   ),
   Sigmoid (),
   ReLU ()
]

 

posted @ 2021-08-04 11:49  程序员龙一  阅读(209)  评论(0编辑  收藏  举报