code: def _build_discrete_net(self, input_layer, action_space):
      self.num_actions = len(action_space.actions)
      self.actions = tf.placeholder(
          tf.int32, [None], name="{}_actions".format(self.get_name())
      )
      self.input.append(self.actions)
  
      policy_values = self.dense_layer(self.num_actions)(
          input_layer, name="fc"
      )
      self.policy_probs = tf.nn.softmax(
          policy_values, name="{}_policy".format(self.get_name())
      )
  
      # (the + eps is to prevent probability 0 which will cause the log later on to be -inf)
      self.policy_distribution = tf.contrib.distributions.Categorical(
          probs=(self.policy_probs + eps)
      )
      self.output = self.policy_probs
  
file_path: coach/rl_coach/architectures/tensorflow_components/heads/acer_policy_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 ActionProbabilities
  from rl_coach.spaces import DiscreteActionSpace
  from rl_coach.spaces import SpacesDefinition
  from rl_coach.utils import eps
label_desc: Use image node_id 3 for calling the ACERPolicyHead obj's underlying member method code with example usage: obj._build_discrete_net(input_layer, action_space) without return types