class_docstr: The MLP surrogate predicts a model's performance on a new dataset using an
  MLP.
  
  The MLP converts inputs into feature vectors of the same size and uses
  either ranking or regression to predict metrics.
code: def _init_model(self, input_dim: int) -> nn.Module:
      layer_sizes = [input_dim] + self.hidden_layer_sizes + [1]
      layers = []
      for i, (in_size, out_size) in enumerate(
          zip(layer_sizes, layer_sizes[1:])
      ):
          if i > 0:
              layers.append(nn.LeakyReLU())
              if self.dropout > 0:
                  layers.append(nn.Dropout(self.dropout))
          layers.append(nn.Linear(in_size, out_size))
      return nn.Sequential(*layers)
  
imports: from typing import cast, List, Literal, Optional
  import numpy
  import numpy.typing
  import pytorch_lightning
  import torch
  from lightkit.data import DataLoader
  from torch import nn
  from torch.utils.data import TensorDataset
  from tsbench.config import Config, ModelConfig
  from tsbench.evaluations.tracking import ModelTracker
  from ._base import DatasetFeaturesMixin, OutputNormalization, Surrogate
  from ._factory import register_surrogate
  from .torch import ListMLELoss, MLPLightningModule
  from .transformers import ConfigTransformer
label_desc: Use image node_id 6 for calling the MLPSurrogate obj's underlying member method code with example usage: obj._init_model(input_dim) and returns: nn