docstr: Head block for Continuous Proximal Policy Optimization, to calculate probabilities for each action given
  middleware representation of the environment state.
  
  :param num_actions: number of actions in action space.
docstr_tok: ["Head","block","for","Continuous","Proximal","Policy","Optimization",",","to","calculate","probabilities","for","each","action","given","middleware","representation","of","the","environment","state",".",":","param","num_actions",":","number","of","actions","in","action","space","."]
code: def __init__(self, num_actions: int) -> None:
      """
      Head block for Continuous Proximal Policy Optimization, to calculate probabilities for each action given
      middleware representation of the environment state.
  
      :param num_actions: number of actions in action space.
      """
      super(ContinuousPPOHead, self).__init__()
      with self.name_scope():
          self.dense = nn.Dense(
              units=num_actions,
              flatten=False,
              weight_initializer=NormalizedRSSInitializer(0.01),
          )
          # all samples (across batch, and time step) share the same covariance, which is learnt,
          # but since we assume the action probability variables are independent,
          # only the diagonal entries of the covariance matrix are specified.
          self.log_std = self.params.get(
              "log_std",
              shape=(num_actions,),
              init=mx.init.Zero(),
              allow_deferred_init=True,
          )
  
imports: from typing import List, Tuple, Union
  from types import ModuleType
  import math
  import mxnet
  from mxnet.gluon import nn
  from rl_coach.base_parameters import AgentParameters
  from rl_coach.core_types import ActionProbabilities
  from rl_coach.spaces import SpacesDefinition, BoxActionSpace, DiscreteActionSpace
  from rl_coach.utils import eps
  from rl_coach.architectures.mxnet_components.heads.head import Head, HeadLoss, LossInputSchema, NormalizedRSSInitializer
  from rl_coach.architectures.mxnet_components.heads.head import LOSS_OUT_TYPE_LOSS, LOSS_OUT_TYPE_REGULARIZATION
  from rl_coach.architectures.mxnet_components.utils import hybrid_clip, broadcast_like
label_desc: Use image node_id 1 to create a new ContinuousPPOHead object from inherited base classes: nn with example: obj = ContinuousPPOHead(num_actions)