class_docstr: Multi-layer Perceptron.
  
  The `_forward` method propagates input forward through the network and stores the outputs
  of each layer along the way. The `_backward` method then goes through each layer in reverse
  order and updates the weights within each layer.
code: def __init__(
      self,
      hidden_dims: tuple[int],
      activations,
      loss: optim.losses.Loss,
      optimizer: optim.base.Optimizer,
      seed: int | None = None,
  ):
      self.activations = activations
      self.hidden_dims = hidden_dims
      self.loss = loss
      self.optimizer = optimizer
      self.seed = seed
      self._optimizers: collections.defaultdict = (
          collections.defaultdict(
              functools.partial(copy.deepcopy, optimizer)
          )
      )
  
imports: from __future__ import annotations
  import collections
  import copy
  import functools
  import numpy
  import pandas
  from river import base, optim
label_desc: Use image node_id 1 to create a new MLP object  with example: obj = MLP(hidden_dims, activations, loss, optimizer, seed)