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 只返回一次