code: def _build_continuous_net(self, input_layer, action_space):
      num_actions = action_space.shape[0]
      self.actions = tf.placeholder(
          tf.float32, [None, num_actions], name="actions"
      )
  
      self.old_policy_mean = tf.placeholder(
          tf.float32, [None, num_actions], "old_policy_mean"
      )
      self.old_policy_std = tf.placeholder(
          tf.float32, [None, num_actions], "old_policy_std"
      )
  
      self.input = [
          self.actions,
          self.old_policy_mean,
          self.old_policy_std,
      ]
      self.policy_mean = self.dense_layer(num_actions)(
          input_layer,
          name="policy_mean",
          kernel_initializer=normalized_columns_initializer(0.01),
      )
  
      # for local networks in distributed settings, we need to move variables we create manually to the
      # tf.GraphKeys.LOCAL_VARIABLES collection, since the variable scope custom getter which is set in
      # Architecture does not apply to them
      if self.is_local and isinstance(
          self.ap.task_parameters, DistributedTaskParameters
      ):
          self.policy_logstd = tf.Variable(
              np.zeros((1, num_actions)),
              dtype="float32",
              collections=[tf.GraphKeys.LOCAL_VARIABLES],
              name="policy_log_std",
          )
      else:
          self.policy_logstd = tf.Variable(
              np.zeros((1, num_actions)),
              dtype="float32",
              name="policy_log_std",
          )
  
      self.policy_std = tf.tile(
          tf.exp(self.policy_logstd),
          [tf.shape(input_layer)[0], 1],
          name="policy_std",
      )
  
      # define the distributions for the policy and the old policy
      self.policy_distribution = (
          tf.contrib.distributions.MultivariateNormalDiag(
              self.policy_mean, self.policy_std + eps
          )
      )
      self.old_policy_distribution = (
          tf.contrib.distributions.MultivariateNormalDiag(
              self.old_policy_mean, self.old_policy_std + eps
          )
      )
  
      self.output = [self.policy_mean, self.policy_std]
  
file_path: coach/rl_coach/architectures/tensorflow_components/heads/ppo_head.py
imports: import numpy
  import tensorflow
  from rl_coach.architectures.tensorflow_components.layers import Dense
  from rl_coach.architectures.tensorflow_components.heads.head import Head, normalized_columns_initializer
  from rl_coach.base_parameters import AgentParameters, DistributedTaskParameters
  from rl_coach.core_types import ActionProbabilities
  from rl_coach.spaces import BoxActionSpace, DiscreteActionSpace
  from rl_coach.spaces import SpacesDefinition
  from rl_coach.utils import eps
label_desc: Use image node_id 4 for calling the PPOHead obj's underlying member method code with example usage: obj._build_continuous_net(input_layer, action_space) without return types