class_docstr: A head is the final part of the network. It takes the embedding from the middleware embedder and passes it through
  a neural network to produce the output of the network. There can be multiple heads in a network, and each one has
  an assigned loss function. The heads are algorithm dependent.
docstr: Get a formatted name for the module
  :return: the formatted name
docstr_tok: ["Get","a","formatted","name","for","the","module",":","return",":","the","formatted","name"]
code: def get_name(self):
      """
      Get a formatted name for the module
      :return: the formatted name
      """
      return "{}_{}".format(self.name, self.head_idx)
  
imports: import numpy
  import tensorflow
  from tensorflow.python.ops.losses.losses_impl import Reduction
  from rl_coach.architectures.tensorflow_components.layers import Dense, convert_layer_class
  from rl_coach.base_parameters import AgentParameters
  from rl_coach.spaces import SpacesDefinition
  from rl_coach.utils import force_list
  from rl_coach.architectures.tensorflow_components.utils import squeeze_tensor
label_desc: Use image node_id 5 for calling the Head obj's underlying member method code with example usage: obj.get_name() and returns: str