class_docstr: Convolutional Gating MLP (cgMLP).
code: def __init__(
      self,
      size: int,
      linear_units: int,
      kernel_size: int,
      dropout_rate: float,
      use_linear_after_conv: bool,
      gate_activation: str,
  ):
      super().__init__()
  
      self.channel_proj1 = torch.nn.Sequential(
          torch.nn.Linear(size, linear_units), torch.nn.GELU()
      )
      self.csgu = ConvolutionalSpatialGatingUnit(
          size=linear_units,
          kernel_size=kernel_size,
          dropout_rate=dropout_rate,
          use_linear_after_conv=use_linear_after_conv,
          gate_activation=gate_activation,
      )
      self.channel_proj2 = torch.nn.Linear(linear_units // 2, size)
  
file_path: espnet/espnet2/asr/layers/cgmlp.py
imports: import torch
  from espnet.nets.pytorch_backend.nets_utils import get_activation
  from espnet.nets.pytorch_backend.transformer.layer_norm import LayerNorm
label_desc: Use image node_id 1 to create a new ConvolutionalGatingMLP object from inherited base classes: torch.nn with example: obj = ConvolutionalGatingMLP(size, linear_units, kernel_size, dropout_rate, use_linear_after_conv, gate_activation)