class_docstr: ECAPA-TDNN encoder. Extracts frame-level ECAPA-TDNN embeddings from
  mel-filterbank energy or MFCC features.
  Paper: B Desplanques at el., ``ECAPA-TDNN: Emphasized Channel Attention,
      Propagation and Aggregation in TDNN Based Speaker Verification,''
      in Proc. INTERSPEECH, 2020.
  
  Args:
      input_size: input feature dimension.
      block: type of encoder block class to use.
      model_scale: scale value of the Res2Net architecture.
      ndim: dimensionality of the hidden representation.
      output_size: output embedding dimension.
code: def __init__(
      self,
      input_size: int,
      block: str = "EcapaBlock",
      model_scale: int = 8,
      ndim: int = 1024,
      output_size: int = 1536,
      **kwargs,
  ):
      assert check_argument_types()
      super().__init__()
      if block == "EcapaBlock":
          block = EcapaBlock
      else:
          raise ValueError(f"unsupported block, got: {block}")
      self._output_size = output_size
  
      self.conv = nn.Conv1d(
          input_size, ndim, kernel_size=5, stride=1, padding=2
      )
      self.relu = nn.ReLU()
      self.bn = nn.BatchNorm1d(ndim)
  
      self.layer1 = block(
          ndim, ndim, kernel_size=3, dilation=2, scale=model_scale
      )
      self.layer2 = block(
          ndim, ndim, kernel_size=3, dilation=3, scale=model_scale
      )
      self.layer3 = block(
          ndim, ndim, kernel_size=3, dilation=4, scale=model_scale
      )
      self.layer4 = nn.Conv1d(3 * ndim, output_size, kernel_size=1)
  
      self.mp3 = nn.MaxPool1d(3)
  
file_path: espnet/espnet2/spk/encoder/ecapa_tdnn_encoder.py
imports: import torch
  import torch.nn
  from typeguard import check_argument_types
  from espnet2.asr.encoder.abs_encoder import AbsEncoder
  from espnet2.spk.layers.ecapa_block import EcapaBlock
label_desc: Use image node_id 1 to create a new EcapaTdnnEncoder object from inherited base classes: AbsEncoder with example: obj = EcapaTdnnEncoder(input_size, block, model_scale, ndim, output_size)