How to get features of shufflenetV2?

Unlike other networks, it doesn`t have feautres or layers

like

len(model.features())

I tried model.chirldren() but not worked

any other good ideas?

the below is shufflenetV2 structure

[ShuffleNetV2(
(conv1): Sequential(
(0): Conv2d(3, 24, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)
(1): BatchNorm2d(24, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(2): ReLU(inplace=True)
)
(maxpool): MaxPool2d(kernel_size=3, stride=2, padding=1, dilation=1, ceil_mode=False)
(stage2): Sequential(
(0): InvertedResidual(
(branch1): Sequential(
(0): Conv2d(24, 24, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), groups=24, bias=False)
(1): BatchNorm2d(24, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(2): Conv2d(24, 58, kernel_size=(1, 1), stride=(1, 1), bias=False)
(3): BatchNorm2d(58, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(4): ReLU(inplace=True)
)
(branch2): Sequential(
(0): Conv2d(24, 58, kernel_size=(1, 1), stride=(1, 1), bias=False)
(1): BatchNorm2d(58, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(2): ReLU(inplace=True)
(3): Conv2d(58, 58, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), groups=58, bias=False)
(4): BatchNorm2d(58, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(5): Conv2d(58, 58, kernel_size=(1, 1), stride=(1, 1), bias=False)
(6): BatchNorm2d(58, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(7): ReLU(inplace=True)
)
)
(1): InvertedResidual(
(branch1): Sequential()
(branch2): Sequential(
(0): Conv2d(58, 58, kernel_size=(1, 1), stride=(1, 1), bias=False)
(1): BatchNorm2d(58, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(2): ReLU(inplace=True)
(3): Conv2d(58, 58, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), groups=58, bias=False)
(4): BatchNorm2d(58, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(5): Conv2d(58, 58, kernel_size=(1, 1), stride=(1, 1), bias=False)
(6): BatchNorm2d(58, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(7): ReLU(inplace=True)
)
)
(2): InvertedResidual(
(branch1): Sequential()
(branch2): Sequential(
(0): Conv2d(58, 58, kernel_size=(1, 1), stride=(1, 1), bias=False)
(1): BatchNorm2d(58, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(2): ReLU(inplace=True)
(3): Conv2d(58, 58, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), groups=58, bias=False)
(4): BatchNorm2d(58, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(5): Conv2d(58, 58, kernel_size=(1, 1), stride=(1, 1), bias=False)
(6): BatchNorm2d(58, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(7): ReLU(inplace=True)
)
)
(3): InvertedResidual(
(branch1): Sequential()
(branch2): Sequential(
(0): Conv2d(58, 58, kernel_size=(1, 1), stride=(1, 1), bias=False)
(1): BatchNorm2d(58, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(2): ReLU(inplace=True)
(3): Conv2d(58, 58, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), groups=58, bias=False)
(4): BatchNorm2d(58, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(5): Conv2d(58, 58, kernel_size=(1, 1), stride=(1, 1), bias=False)
(6): BatchNorm2d(58, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(7): ReLU(inplace=True)
)
)
)
(stage3): Sequential(
(0): InvertedResidual(
(branch1): Sequential(
(0): Conv2d(116, 116, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), groups=116, bias=False)
(1): BatchNorm2d(116, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(2): Conv2d(116, 116, kernel_size=(1, 1), stride=(1, 1), bias=False)
(3): BatchNorm2d(116, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(4): ReLU(inplace=True)
)
(branch2): Sequential(
(0): Conv2d(116, 116, kernel_size=(1, 1), stride=(1, 1), bias=False)
(1): BatchNorm2d(116, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(2): ReLU(inplace=True)
(3): Conv2d(116, 116, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), groups=116, bias=False)
(4): BatchNorm2d(116, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(5): Conv2d(116, 116, kernel_size=(1, 1), stride=(1, 1), bias=False)
(6): BatchNorm2d(116, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(7): ReLU(inplace=True)
)
)
(1): InvertedResidual(
(branch1): Sequential()
(branch2): Sequential(
(0): Conv2d(116, 116, kernel_size=(1, 1), stride=(1, 1), bias=False)
(1): BatchNorm2d(116, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(2): ReLU(inplace=True)
(3): Conv2d(116, 116, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), groups=116, bias=False)
(4): BatchNorm2d(116, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(5): Conv2d(116, 116, kernel_size=(1, 1), stride=(1, 1), bias=False)
(6): BatchNorm2d(116, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(7): ReLU(inplace=True)
)
)
(2): InvertedResidual(
(branch1): Sequential()
(branch2): Sequential(
(0): Conv2d(116, 116, kernel_size=(1, 1), stride=(1, 1), bias=False)
(1): BatchNorm2d(116, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(2): ReLU(inplace=True)
(3): Conv2d(116, 116, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), groups=116, bias=False)
(4): BatchNorm2d(116, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(5): Conv2d(116, 116, kernel_size=(1, 1), stride=(1, 1), bias=False)
(6): BatchNorm2d(116, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(7): ReLU(inplace=True)
)
)
(3): InvertedResidual(
(branch1): Sequential()
(branch2): Sequential(
(0): Conv2d(116, 116, kernel_size=(1, 1), stride=(1, 1), bias=False)
(1): BatchNorm2d(116, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(2): ReLU(inplace=True)
(3): Conv2d(116, 116, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), groups=116, bias=False)
(4): BatchNorm2d(116, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(5): Conv2d(116, 116, kernel_size=(1, 1), stride=(1, 1), bias=False)
(6): BatchNorm2d(116, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(7): ReLU(inplace=True)
)
)
(4): InvertedResidual(
(branch1): Sequential()
(branch2): Sequential(
(0): Conv2d(116, 116, kernel_size=(1, 1), stride=(1, 1), bias=False)
(1): BatchNorm2d(116, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(2): ReLU(inplace=True)
(3): Conv2d(116, 116, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), groups=116, bias=False)
(4): BatchNorm2d(116, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(5): Conv2d(116, 116, kernel_size=(1, 1), stride=(1, 1), bias=False)
(6): BatchNorm2d(116, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(7): ReLU(inplace=True)
)
)
(5): InvertedResidual(
(branch1): Sequential()
(branch2): Sequential(
(0): Conv2d(116, 116, kernel_size=(1, 1), stride=(1, 1), bias=False)
(1): BatchNorm2d(116, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(2): ReLU(inplace=True)
(3): Conv2d(116, 116, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), groups=116, bias=False)
(4): BatchNorm2d(116, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(5): Conv2d(116, 116, kernel_size=(1, 1), stride=(1, 1), bias=False)
(6): BatchNorm2d(116, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(7): ReLU(inplace=True)
)
)
(6): InvertedResidual(
(branch1): Sequential()
(branch2): Sequential(
(0): Conv2d(116, 116, kernel_size=(1, 1), stride=(1, 1), bias=False)
(1): BatchNorm2d(116, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(2): ReLU(inplace=True)
(3): Conv2d(116, 116, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), groups=116, bias=False)
(4): BatchNorm2d(116, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(5): Conv2d(116, 116, kernel_size=(1, 1), stride=(1, 1), bias=False)
(6): BatchNorm2d(116, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(7): ReLU(inplace=True)
)
)
(7): InvertedResidual(
(branch1): Sequential()
(branch2): Sequential(
(0): Conv2d(116, 116, kernel_size=(1, 1), stride=(1, 1), bias=False)
(1): BatchNorm2d(116, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(2): ReLU(inplace=True)
(3): Conv2d(116, 116, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), groups=116, bias=False)
(4): BatchNorm2d(116, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(5): Conv2d(116, 116, kernel_size=(1, 1), stride=(1, 1), bias=False)
(6): BatchNorm2d(116, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(7): ReLU(inplace=True)
)
)
)
(stage4): Sequential(
(0): InvertedResidual(
(branch1): Sequential(
(0): Conv2d(232, 232, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), groups=232, bias=False)
(1): BatchNorm2d(232, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(2): Conv2d(232, 232, kernel_size=(1, 1), stride=(1, 1), bias=False)
(3): BatchNorm2d(232, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(4): ReLU(inplace=True)
)
(branch2): Sequential(
(0): Conv2d(232, 232, kernel_size=(1, 1), stride=(1, 1), bias=False)
(1): BatchNorm2d(232, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(2): ReLU(inplace=True)
(3): Conv2d(232, 232, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), groups=232, bias=False)
(4): BatchNorm2d(232, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(5): Conv2d(232, 232, kernel_size=(1, 1), stride=(1, 1), bias=False)
(6): BatchNorm2d(232, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(7): ReLU(inplace=True)
)
)
(1): InvertedResidual(
(branch1): Sequential()
(branch2): Sequential(
(0): Conv2d(232, 232, kernel_size=(1, 1), stride=(1, 1), bias=False)
(1): BatchNorm2d(232, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(2): ReLU(inplace=True)
(3): Conv2d(232, 232, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), groups=232, bias=False)
(4): BatchNorm2d(232, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(5): Conv2d(232, 232, kernel_size=(1, 1), stride=(1, 1), bias=False)
(6): BatchNorm2d(232, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(7): ReLU(inplace=True)
)
)
(2): InvertedResidual(
(branch1): Sequential()
(branch2): Sequential(
(0): Conv2d(232, 232, kernel_size=(1, 1), stride=(1, 1), bias=False)
(1): BatchNorm2d(232, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(2): ReLU(inplace=True)
(3): Conv2d(232, 232, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), groups=232, bias=False)
(4): BatchNorm2d(232, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(5): Conv2d(232, 232, kernel_size=(1, 1), stride=(1, 1), bias=False)
(6): BatchNorm2d(232, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(7): ReLU(inplace=True)
)
)
(3): InvertedResidual(
(branch1): Sequential()
(branch2): Sequential(
(0): Conv2d(232, 232, kernel_size=(1, 1), stride=(1, 1), bias=False)
(1): BatchNorm2d(232, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(2): ReLU(inplace=True)
(3): Conv2d(232, 232, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), groups=232, bias=False)
(4): BatchNorm2d(232, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(5): Conv2d(232, 232, kernel_size=(1, 1), stride=(1, 1), bias=False)
(6): BatchNorm2d(232, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(7): ReLU(inplace=True)
)
)
)
(conv5): Sequential(
(0): Conv2d(464, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)
(1): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(2): ReLU(inplace=True)
)
(fc): Linear(in_features=1024, out_features=1000, bias=True)
)]