class_docstr: The search space proposed in `Single Path One-shot <https://www.ecva.net/papers/eccv_2020/papers_ECCV/papers/123610528.pdf>`__.
  
  The basic building block design is inspired by a state-of-the-art manually-designed network --
  `ShuffleNetV2 <https://openaccess.thecvf.com/content_ECCV_2018/html/Ningning_Light-weight_CNN_Architecture_ECCV_2018_paper.html>`__.
  There are 20 choice blocks in total. Each choice block has 4 candidates, namely ``choice 3``, ``choice 5``,
  ``choice_7`` and ``choice_x`` respectively. They differ in kernel sizes and the number of depthwise convolutions.
  The size of the search space is :math:`4^{20}`.
  
  Parameters
  ----------
  num_labels : int
      Number of classes for the classification head. Default: 1000.
  channel_search : bool
      If true, for each building block, the number of ``mid_channels``
      (output channels of the first 1x1 conv in each building block) varies from 0.2x to 1.6x (quantized to multiple of 0.2).
      Here, "k-x" means k times the number of default channels.
      Otherwise, 1.0x is used by default. Default: false.
  affine : bool
      Apply affine to all batch norm. Default: true.
code: def _initialize_weights(self):
      for name, m in self.named_modules():
          if isinstance(m, nn.Conv2d):
              if "first" in name:
                  torch.nn.init.normal_(m.weight, 0, 0.01)  # type: ignore
              else:
                  torch.nn.init.normal_(m.weight, 0, 1.0 / m.weight.shape[1])  # type: ignore
              if m.bias is not None:
                  torch.nn.init.constant_(m.bias, 0)  # type: ignore
          elif isinstance(m, nn.BatchNorm2d):
              if m.weight is not None:
                  torch.nn.init.constant_(m.weight, 1)  # type: ignore
              if m.bias is not None:
                  torch.nn.init.constant_(m.bias, 0.0001)  # type: ignore
              if m.running_mean is not None:
                  torch.nn.init.constant_(m.running_mean, 0)  # type: ignore
          elif isinstance(m, nn.BatchNorm1d):
              if m.weight is not None:
                  torch.nn.init.constant_(m.weight, 1)  # type: ignore
              if m.bias is not None:
                  torch.nn.init.constant_(m.bias, 0.0001)  # type: ignore
              if m.running_mean is not None:
                  torch.nn.init.constant_(m.running_mean, 0)  # type: ignore
          elif isinstance(m, nn.Linear):
              torch.nn.init.normal_(m.weight, 0, 0.01)  # type: ignore
              if m.bias is not None:
                  torch.nn.init.constant_(m.bias, 0)
  
imports: from typing import Union, cast
  import torch
  import torch.nn
  import nni
  from nni.mutable import MutableExpression
  from nni.nas.nn.pytorch import LayerChoice, ModelSpace, MutableConv2d, MutableBatchNorm2d
  from .utils.pretrained import load_pretrained_weight
label_desc: Use image node_id 3 for calling the ShuffleNetSpace obj's underlying member method code with example usage: obj._initialize_weights() without return types