class_docstr: Implements an 'n-tower' MLPDecoder
code: def __init__(
      self,
      config: Config,
      tower_dims: List[int],
      to_dim: int,
      export_type=-1,
  ) -> None:
      super().__init__(config)
      for i in range(len(tower_dims)):
          setattr(
              self,
              f"tower_mlp_{i}",
              MLPDecoderNTower.get_mlp(
                  tower_dims[i],
                  0,
                  config.tower_specific_hidden_dims[i],
                  config.layer_norm,
                  config.dropout,
                  config.activation,
                  export_embedding=True,
              ),
          )
      from_dim = 0
      for dims in config.tower_specific_hidden_dims:
          from_dim += dims[-1]
  
      self.mlp = MLPDecoderNTower.get_mlp(
          from_dim,
          to_dim,
          config.hidden_dims,
          config.layer_norm,
          config.dropout,
          config.activation,
      )
      self.out_dim = to_dim
      self.export_type = export_type
      log_class_usage
  
file_path: pytext/pytext/models/decoders/mlp_decoder_n_tower.py
imports: from typing import List
  import torch
  import torch.nn
  from pytext.config.module_config import Activation
  from pytext.models.decoders.decoder_base import DecoderBase
  from pytext.optimizer import get_activation
  from pytext.utils import precision
  from pytext.utils.usage import log_class_usage
label_desc: Use image node_id 1 to create a new MLPDecoderNTower object from inherited base classes: DecoderBase with example: obj = MLPDecoderNTower(config, tower_dims, to_dim, export_type)