class_docstr: Implements a 'n-tower' MLP: one for each of the multi labels
  Used in USM/EA: the user satisfaction modeling, pTSR prediction and
  Error Attribution are all 3 label sets that need predicting.
class_docstr_tok: ["Implements","a","'n-tower","'","MLP",":","one","for","each","of","the","multi","labels","Used","in","USM\/EA",":","the","user","satisfaction","modeling",",","pTSR","prediction","and","Error","Attribution","are","all","3","label","sets","that","need","predicting","."]
code: def __init__(
      self,
      config: Config,
      in_dim: int,
      output_dim: Dict[str, int],
      label_names: List[str],
  ) -> None:
      super().__init__(config)
      self.label_mlps = nn.ModuleDict({})
      # Store the ordered list to preserve the ordering of the labels
      # when generating the output layer
      self.label_names = label_names
      aggregate_out_dim = 0
      for label_, _ in output_dim.items():
          self.label_mlps[label_] = MultiLabelDecoder.get_mlp(
              in_dim, output_dim[label_], config.hidden_dims
          )
          aggregate_out_dim += output_dim[label_]
      self.out_dim = (1, aggregate_out_dim)
      log_class_usage(__class__)
  
file_path: pytext/pytext/models/decoders/multilabel_decoder.py
imports: from typing import Dict, List
  import torch
  import torch.nn
  from pytext.utils.usage import log_class_usage
  from .decoder_base import DecoderBase
label_desc: Use image node_id 1 to create a new MultiLabelDecoder object from inherited base classes: DecoderBase with example: obj = MultiLabelDecoder(config, in_dim, output_dim, label_names)