pytorch model.modules()疑问

最近在做剪枝相关的事情,在遍历模型模块的时候,使用的是如下方式:

for k, m in enumerate(model.modules()):
    print("k:", k)
    print("m:", m)

但是对于模型的模块输出发现有缺失,如下:

k: 6
m: Block(
  (conv1): Conv2d(16, 16, kernel_size=(1, 1), stride=(1, 1), bias=False)
  (bn1): BatchNorm2d(16, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
  (nolinear1): ReLU(inplace=True)
  (conv2): Conv2d(16, 16, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), groups=16, bias=False)
  (bn2): BatchNorm2d(16, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
  (nolinear2): ReLU(inplace=True)
  (conv3): Conv2d(16, 16, kernel_size=(1, 1), stride=(1, 1), bias=False)
  (bn3): BatchNorm2d(16, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
  (shortcut): Sequential()
  (se): SeModule(
    (avg_pool): AdaptiveAvgPool2d(output_size=1)
    (se): Sequential(
      (0): Conv2d(16, 4, kernel_size=(1, 1), stride=(1, 1), bias=False)
      (1): BatchNorm2d(4, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (2): ReLU(inplace=True)
      (3): Conv2d(4, 16, kernel_size=(1, 1), stride=(1, 1), bias=False)
      (4): BatchNorm2d(16, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
      (5): hsigmoid()
    )
  )
)
k: 7
m: Conv2d(16, 16, kernel_size=(1, 1), stride=(1, 1), bias=False)
k: 8
m: BatchNorm2d(16, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
k: 9
m: ReLU(inplace=True)
k: 10
m: Conv2d(16, 16, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), groups=16, bias=False)
k: 11
m: BatchNorm2d(16, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
k: 12
m: Conv2d(16, 16, kernel_size=(1, 1), stride=(1, 1), bias=False)
k: 13
m: BatchNorm2d(16, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
k: 14
m: Sequential()
k: 15

Block结构内的第二个激活函数没有遍历输出,而是跳过了,很奇怪,还没找到原因,先记录一下。


版权声明:本文为GeneralJing原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。