class_docstr: Convolutional subsampler: a stack of 1D convolution (along temporal
  dimension) followed by non-linear activation via gated linear units
  (https://arxiv.org/abs/1911.08460)
  
  Args:
      in_channels (int): the number of input channels
      mid_channels (int): the number of intermediate channels
      out_channels (int): the number of output channels
      kernel_sizes (List[int]): the kernel size for each convolutional layer
class_docstr_tok: ["Convolutional","subsampler",":","a","stack","of","1D","convolution","(","along","temporal","dimension",")","followed","by","non-linear","activation","via","gated","linear","units","(","https",":","\/\/arxiv.org\/abs\/1911.08460",")","Args",":","in_channels","(","int",")",":","the","number","of","input","channels","mid_channels","(","int",")",":","the","number","of","intermediate","channels","out_channels","(","int",")",":","the","number","of","output","channels","kernel_sizes","(","List","[","int","]",")",":","the","kernel","size","for","each","convolutional","layer"]
code: def forward(self, src_tokens, src_lengths):
      bsz, in_seq_len, _ = src_tokens.size()  # B x T x (C x D)
      x = src_tokens.transpose(1, 2).contiguous()  # -> B x (C x D) x T
      for conv in self.conv_layers:
          x = conv(x)
          x = nn.functional.glu(x, dim=1)
      _, _, out_seq_len = x.size()
      x = (
          x.transpose(1, 2).transpose(0, 1).contiguous()
      )  # -> T x B x (C x D)
      return x, self.get_out_seq_lens_tensor(src_lengths)
  
file_path: fairseq/fairseq/models/speech_to_text/modules/convolution.py
imports: from typing import List
  import torch
  import torch.nn
label_desc: Use image node_id 3 for calling the Conv1dSubsampler obj's underlying member method code with example usage: obj.forward(src_tokens, src_lengths) and returns: x,  self