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: Optional function that allows adding any extra definitions after the head has been fully defined
  For example, this allows doing additional calculations that are based on the loss
  :return: None
docstr_tok: ["Optional","function","that","allows","adding","any","extra","definitions","after","the","head","has","been","fully","defined","For","example",",","this","allows","doing","additional","calculations","that","are","based","on","the","loss",":","return",":","None"]
code: def _post_build(self):
      """
      Optional function that allows adding any extra definitions after the head has been fully defined
      For example, this allows doing additional calculations that are based on the loss
      :return: None
      """
      pass
  
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 4 for calling the Head obj's underlying member method code with example usage: obj._post_build() without return types