class_docstr: Multi-layer perceptron (MLP). If the hidden or output feature dimension is
  not provided, we assign it the input feature dimension.
docstr: Parameters
  ----------
  in_features
      Dimension of input features.
  hidden_features
      Dimension of hidden features.
  out_features
      Dimension of output features.
  num_layers
      Number of layers.
  activation
      Name of activation function.
  dropout_prob
      Dropout probability.
  normalization
      Name of normalization function.
docstr_tok: ["Parameters","--","--","--","--","--","in_features","Dimension","of","input","features",".","hidden_features","Dimension","of","hidden","features",".","out_features","Dimension","of","output","features",".","num_layers","Number","of","layers",".","activation","Name","of","activation","function",".","dropout_prob","Dropout","probability",".","normalization","Name","of","normalization","function","."]
code: def __init__(
      self,
      in_features: int,
      hidden_features: Optional[int] = None,
      out_features: Optional[int] = None,
      num_layers: Optional[int] = 1,
      activation: Optional[str] = "gelu",
      dropout_prob: Optional[float] = 0.5,
      normalization: Optional[str] = "layer_norm",
  ):
      """
      Parameters
      ----------
      in_features
          Dimension of input features.
      hidden_features
          Dimension of hidden features.
      out_features
          Dimension of output features.
      num_layers
          Number of layers.
      activation
          Name of activation function.
      dropout_prob
          Dropout probability.
      normalization
          Name of normalization function.
      """
      super().__init__()
      out_features = out_features or in_features
      hidden_features = hidden_features or in_features
  
      layers = []
      for _ in range(num_layers):
          per_unit = Unit(
              normalization=normalization,
              in_features=in_features,
              out_features=hidden_features,
              activation=activation,
              dropout_prob=dropout_prob,
          )
          in_features = hidden_features
          layers.append(per_unit)
      if out_features != hidden_features:
          self.fc_out = nn.Linear(hidden_features, out_features)
      else:
          self.fc_out = None
      self.layers = nn.Sequential(*layers)
  
file_path: autogluon/multimodal/src/autogluon/multimodal/models/mlp.py
imports: from typing import Optional
  import numpy
  import torch
  from torch import nn
label_desc: Use image node_id 1 to create a new MLP object from inherited base classes: nn with example: obj = MLP(in_features, hidden_features, out_features, num_layers, activation, dropout_prob, normalization)