class_docstr: An MLP primitive used by several DreamerV3 components and described in [1] Fig 5.
  
  MLP=multi-layer perceptron.
  
  See Appendix B in [1] for the MLP sizes depending on the given `model_size`.
docstr: Performs a forward pass through this MLP.
  
  Args:
      input_: The input tensor for the MLP dense stack.
docstr_tok: ["Performs","a","forward","pass","through","this","MLP",".","Args",":","input_",":","The","input","tensor","for","the","MLP","dense","stack","."]
code: def call(self, input_):
      """Performs a forward pass through this MLP.
  
      Args:
          input_: The input tensor for the MLP dense stack.
      """
      out = input_
  
      for dense_layer, layer_norm in zip(
          self.dense_layers, self.layer_normalizations
      ):
          # In this order: layer, normalization, activation.
          out = tf.nn.silu(layer_norm(dense_layer(out)))
  
      if self.output_layer is not None:
          out = self.output_layer(out)
  
      return out
  
imports: from typing import Optional
  from ray.rllib.algorithms.dreamerv3.utils import get_dense_hidden_units, get_num_dense_layers
  from ray.rllib.utils.framework import try_import_tf
label_desc: Use image node_id 2 for calling the MLP obj's underlying member method code with example usage: obj.call(input_) and returns: out