class_docstr: A multi-layer perceptron with N dense layers.
  
  All layers (except for an optional additional extra output layer) share the same
  activation function, bias setup (use bias or not), and LayerNorm setup
  (use layer normalization or not).
  
  If `output_dim` (int) is not None, an additional, extra output dense layer is added,
  which might have its own activation function (e.g. "linear"). However, the output
  layer does NOT use layer normalization.
class_docstr_tok: ["A","multi-layer","perceptron","with","N","dense","layers",".","All","layers","(","except","for","an","optional","additional","extra","output","layer",")","share","the","same","activation","function",",","bias","setup","(","use","bias","or","not",")",",","and","LayerNorm","setup","(","use","layer","normalization","or","not",")",".","If","`","output_dim","`","(","int",")","is","not","None",",","an","additional",",","extra","output","dense","layer","is","added",",","which","might","have","its","own","activation","function","(","e.g",".","``","linear","''",")",".","However",",","the","output","layer","does","NOT","use","layer","normalization","."]
code: def call(self, inputs, **kwargs):
      return self.network(inputs)
  
file_path: ray/rllib/core/models/tf/primitives.py
imports: from typing import Callable, Dict, List, Optional, Tuple, Union
  from ray.rllib.models.utils import get_activation_fn, get_initializer_fn
  from ray.rllib.utils.framework import try_import_tf
label_desc: Use image node_id 2 for calling the TfMLP obj's underlying member method code with example usage: obj.call(inputs) and returns: self