code: def __init__(
      self,
      in_channels,
      out_channels=None,
      kernel_size=3,
      norm_type="bn",
      norm_groups=32,
      act="swish",
  ):
      super(SeparableConvLayer, self).__init__()
      assert norm_type in ["bn", "sync_bn", "gn", None]
      assert act in ["swish", "relu", None]
  
      self.in_channels = in_channels
      if out_channels is None:
          self.out_channels = self.in_channels
      self.norm_type = norm_type
      self.norm_groups = norm_groups
      self.depthwise_conv = nn.Conv2D(
          in_channels,
          in_channels,
          kernel_size,
          padding=kernel_size // 2,
          groups=in_channels,
          bias_attr=False,
      )
      self.pointwise_conv = nn.Conv2D(in_channels, self.out_channels, 1)
  
      # norm type
      if self.norm_type in ["bn", "sync_bn"]:
          self.norm = nn.BatchNorm2D(self.out_channels)
      elif self.norm_type == "gn":
          self.norm = nn.GroupNorm(
              num_groups=self.norm_groups,
              num_channels=self.out_channels,
          )
  
      # activation
      if act == "swish":
          self.act = nn.Swish()
      elif act == "relu":
          self.act = nn.ReLU()
  
imports: import paddle
  import paddle.nn
  import paddle.nn.functional
  from paddle import ParamAttr
  from paddle.nn.initializer import Constant
  from ppdet.core.workspace import register, serializable
  from ppdet.modeling.layers import ConvNormLayer
  from ..shape_spec import ShapeSpec
label_desc: Use image node_id 1 to create a new SeparableConvLayer object from inherited base classes: nn with example: obj = SeparableConvLayer(in_channels, out_channels, kernel_size, norm_type, norm_groups, act)