class_docstr: Convolution based feature extractor from raw audio.
  Channel numbers increasing is based on https://arxiv.org/abs/2109.06870
  
  Arguments
  ---------
  out_channels : list of ints
      Out channels of convolutional layers.
  kernel_sizes : list of ints
      Kernels of convolutional layers.
  strides : list of ints
      Strides of convolutional layers.
  dropout : float
      Dropout of CNN.
  
  Example
  -------
  >>> extractor = W2VLatentExtractor()
  >>> inputs = torch.rand(10, 5000)
  >>> outputs = extractor(inputs)
  >>> outputs.shape
  torch.Size([10, 14, 512])
docstr: Calculates output lengths for given input lengths. 
docstr_tok: ["Calculates","output","lengths","for","given","input","lengths","."]
code: def get_output_lengths(self, input_lengths: torch.LongTensor):
      """Calculates output lengths for given input lengths."""
  
      def _conv_out_length(input_length, kernel_size, stride):
          return torch.floor((input_length - kernel_size) / stride + 1)
  
      for kernel_size, stride in zip(self.kernel_sizes, self.strides):
          input_lengths = _conv_out_length(
              input_lengths, kernel_size, stride
          )
      return input_lengths.to(torch.long)
  
imports: import logging
  import torch
  import torch.nn.functional
  import torch.nn
  import random
  import numpy
  from speechbrain.lobes.models.transformer.Transformer import PositionalEncoding
  from speechbrain.utils.data_utils import batch_pad_right
  from speechbrain.dataio.dataio import length_to_mask
  from speechbrain.lobes.models.convolution import ConvolutionFrontEnd
  from speechbrain.nnet.CNN import Conv1d
  from speechbrain.nnet.normalization import LayerNorm
  from speechbrain.nnet.quantisers import GumbelVectorQuantizer
label_desc: Use image node_id 3 for calling the W2VLatentExtractor obj's underlying member method code with example usage: obj.get_output_lengths(input_lengths) and returns: input_lengths, torch