code: def __str__(self):
      result = [
          "State Value Stream - V",
          "\tDense (num outputs = 1)",
          "Action Advantage Stream - A",
          "\tDense (num outputs = {})".format(
              (self.num_actions * (self.num_actions + 1)) / 2
          ),
          "\tReshape to lower triangular matrix L (new size = {} x {})".format(
              self.num_actions, self.num_actions
          ),
          "\tP = L*L^T",
          "\tA = -1/2 * (u - mu)^T * P * (u - mu)",
          "Action Stream - mu",
          "\tDense (num outputs = {})".format(self.num_actions),
          "\tActivation (type = {})".format(
              self.activation_function.__name__
          ),
          "\tMultiply (factor = {})".format(self.output_scale),
          "State-Action Value Stream - Q",
          "\tAdd (V, A)",
      ]
      return "\n".join(result)
  
file_path: coach/rl_coach/architectures/tensorflow_components/heads/naf_head.py
imports: import tensorflow
  from rl_coach.architectures.tensorflow_components.layers import Dense
  from rl_coach.architectures.tensorflow_components.heads.head import Head
  from rl_coach.base_parameters import AgentParameters
  from rl_coach.core_types import QActionStateValue
  from rl_coach.spaces import BoxActionSpace
  from rl_coach.spaces import SpacesDefinition
label_desc: Use image node_id 3 for calling the NAFHead obj's underlying member method code with example usage: obj.__str__() and returns: str