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 latents from audio input.
          
docstr_tok: ["Calculates","latents","from","audio","input","."]
code: def forward(self, x, normalize_signal=True):
      """Calculates latents from audio input."""
      if normalize_signal:
          x = F.layer_norm(x, x.shape[1:])
      x = x.unsqueeze(2)
      latents = self.extractor(x)
      return self.norm(latents)
  
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 2 for calling the W2VLatentExtractor obj's underlying member method code with example usage: obj.forward(x, normalize_signal) and returns: self