class_docstr: Separable Conv w/ trailing Norm and Activation
      
code: def __init__(
      self,
      in_channels,
      out_channels,
      kernel_size=3,
      stride=1,
      dilation=1,
      padding="",
      bias=False,
      channel_multiplier=1.0,
      pw_kernel_size=1,
      norm_layer=nn.BatchNorm2d,
      act_layer=nn.ReLU,
      apply_act=True,
      drop_layer=None,
  ):
      super(SeparableConvNormAct, self).__init__()
  
      self.conv_dw = create_conv2d(
          in_channels,
          int(in_channels * channel_multiplier),
          kernel_size,
          stride=stride,
          dilation=dilation,
          padding=padding,
          depthwise=True,
      )
  
      self.conv_pw = create_conv2d(
          int(in_channels * channel_multiplier),
          out_channels,
          pw_kernel_size,
          padding=padding,
          bias=bias,
      )
  
      norm_act_layer = get_norm_act_layer(norm_layer, act_layer)
      norm_kwargs = (
          dict(drop_layer=drop_layer) if drop_layer is not None else {}
      )
      self.bn = norm_act_layer(
          out_channels, apply_act=apply_act, **norm_kwargs
      )
  
file_path: pytorch-image-models/timm/layers/separable_conv.py
imports: from torch import nn
  from .create_conv2d import create_conv2d
  from .create_norm_act import get_norm_act_layer
label_desc: Use image node_id 1 to create a new SeparableConvNormAct object from inherited base classes: nn with example: obj = SeparableConvNormAct(in_channels, out_channels, kernel_size, stride, dilation, padding, bias, channel_multiplier, pw_kernel_size, norm_layer, act_layer, apply_act, drop_layer)