children() 与 modules() 的区别


   children()modules()都是返回网络模型里的组成元素,但是 children()返回的是最外层的元素, modules()返回的是所有的元素,包括不同级别的子元素。

1 children()

net = nn.Sequential(nn.Linear(2,2), 
                  nn.ReLU(),
                 nn.Sequential(nn.Sigmoid(), nn.ReLU()))
                 
list(net.children())

输出一共3个元素:linearrelusequential

[Linear(in_features=2, out_features=2, bias=True),
 ReLU(),
 Sequential(
   (0): Sigmoid()
   (1): ReLU()
 )]

2 modules()

list(net.modules())

输出一共包括 6 个元素:整体的一个sequential,里面的一个linear,一个relu,一个子sequential,以及sequential里的sigmoidrelu

[Sequential(
   (0): Linear(in_features=2, out_features=2, bias=True)
   (1): ReLU()
   (2): Sequential(
     (0): Sigmoid()
     (1): ReLU()
   )
 ),
 Linear(in_features=2, out_features=2, bias=True),
 ReLU(),
 Sequential(
   (0): Sigmoid()
   (1): ReLU()
 ),
 Sigmoid(),
 ReLU()]

注意modules()中重复的modules只返回一次,是模块级的而不是torch.nn里基础的层。

# 例 1
module = nn.Linear(2, 2)
net = nn.Sequential(module, module)
for idx, m in enumerate(net.modules()):
    print(idx, '->', m)

输出:

0 -> Sequential(
  (0): Linear(in_features=2, out_features=2, bias=True)
  (1): Linear(in_features=2, out_features=2, bias=True)
)
1 -> Linear(in_features=2, out_features=2, bias=True)

例 1 中l = nn.Linear(2, 2)是重复的模块,有单独的命名,是类nn.Linear()的一个固定实例。

# 例 2
net = nn.Sequential(nn.Linear(2, 2), nn.Linear(2, 2))
for idx, m in enumerate(net.modules()):
    print(idx, '->', m)

输出:

0 -> Sequential(
  (0): Linear(in_features=2, out_features=2, bias=True)
  (1): Linear(in_features=2, out_features=2, bias=True)
)
1 -> Linear(in_features=2, out_features=2, bias=True)
2 -> Linear(in_features=2, out_features=2, bias=True)

例 2 中nn.Linear(2, 2)不是重复的模块,被看做类nn.Linear()不同的实例。

【转载自】pytorch Module 里的 children() 与 modules() 的区别

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值