class_docstr: Policy object that implements a DDPG-like actor critic, using a feed forward neural network.
  
  :param sess: (TensorFlow session) The current TensorFlow session
  :param ob_space: (Gym Space) The observation space of the environment
  :param ac_space: (Gym Space) The action space of the environment
  :param n_env: (int) The number of environments to run
  :param n_steps: (int) The number of steps to run for each environment
  :param n_batch: (int) The number of batch to run (n_envs * n_steps)
  :param reuse: (bool) If the policy is reusable or not
  :param layers: ([int]) The size of the Neural network for the policy (if None, default to [64, 64])
  :param cnn_extractor: (function (TensorFlow Tensor, ``**kwargs``): (TensorFlow Tensor)) the CNN feature extraction
  :param feature_extraction: (str) The feature extraction type ("cnn" or "mlp")
  :param layer_norm: (bool) enable layer normalisation
  :param reg_weight: (float) Regularization loss weight for the policy parameters
  :param act_fun: (tf.func) the activation function to use in the neural network.
  :param kwargs: (dict) Extra keyword arguments for the nature CNN feature extraction
class_docstr_tok: ["Policy","object","that","implements","a","DDPG-like","actor","critic",",","using","a","feed","forward","neural","network",".",":","param","sess",":","(","TensorFlow","session",")","The","current","TensorFlow","session",":","param","ob_space",":","(","Gym","Space",")","The","observation","space","of","the","environment",":","param","ac_space",":","(","Gym","Space",")","The","action","space","of","the","environment",":","param","n_env",":","(","int",")","The","number","of","environments","to","run",":","param","n_steps",":","(","int",")","The","number","of","steps","to","run","for","each","environment",":","param","n_batch",":","(","int",")","The","number","of","batch","to","run","(","n_envs","*","n_steps",")",":","param","reuse",":","(","bool",")","If","the","policy","is","reusable","or","not",":","param","layers",":","(","[","int","]",")","The","size","of","the","Neural","network","for","the","policy","(","if","None",",","default","to","[","64",",","64","]",")",":","param","cnn_extractor",":","(","function","(","TensorFlow","Tensor",",","``","*","*","kwargs","``",")",":","(","TensorFlow","Tensor",")",")","the","CNN","feature","extraction",":","param","feature_extraction",":","(","str",")","The","feature","extraction","type","(","``","cnn","''","or","``","mlp","''",")",":","param","layer_norm",":","(","bool",")","enable","layer","normalisation",":","param","reg_weight",":","(","float",")","Regularization","loss","weight","for","the","policy","parameters",":","param","act_fun",":","(","tf.func",")","the","activation","function","to","use","in","the","neural","network",".",":","param","kwargs",":","(","dict",")","Extra","keyword","arguments","for","the","nature","CNN","feature","extraction"]
code: def make_actor(self, obs=None, reuse=False, scope="pi"):
      if obs is None:
          obs = self.processed_obs
  
      with tf.variable_scope(scope, reuse=reuse):
          if self.feature_extraction == "cnn":
              pi_h = self.cnn_extractor(obs, **self.cnn_kwargs)
          else:
              pi_h = tf.layers.flatten(obs)
  
          pi_h = mlp(
              pi_h,
              self.layers,
              self.activ_fn,
              layer_norm=self.layer_norm,
          )
  
          self.act_mu = mu_ = tf.layers.dense(
              pi_h, self.ac_space.shape[0], activation=None
          )
          # Important difference with SAC and other algo such as PPO:
          # the std depends on the state, so we cannot use stable_baselines.common.distribution
          log_std = tf.layers.dense(
              pi_h, self.ac_space.shape[0], activation=None
          )
  
      # Regularize policy output (not used for now)
      # reg_loss = self.reg_weight * 0.5 * tf.reduce_mean(log_std ** 2)
      # reg_loss += self.reg_weight * 0.5 * tf.reduce_mean(mu ** 2)
      # self.reg_loss = reg_loss
  
      # OpenAI Variation to cap the standard deviation
      # activation = tf.tanh # for log_std
      # log_std = LOG_STD_MIN + 0.5 * (LOG_STD_MAX - LOG_STD_MIN) * (log_std + 1)
      # Original Implementation
      log_std = tf.clip_by_value(log_std, LOG_STD_MIN, LOG_STD_MAX)
  
      self.std = std = tf.exp(log_std)
      # Reparameterization trick
      pi_ = mu_ + tf.random_normal(tf.shape(mu_)) * std
      logp_pi = gaussian_likelihood(pi_, mu_, log_std)
      self.entropy = gaussian_entropy(log_std)
      # MISSING: reg params for log and mu
      # Apply squashing and account for it in the probability
      deterministic_policy, policy, logp_pi = apply_squashing_func(
          mu_, pi_, logp_pi
      )
      self.policy = policy
      self.deterministic_policy = deterministic_policy
  
      return deterministic_policy, policy, logp_pi
  
imports: import tensorflow
  import numpy
  from gym.spaces import Box
  from stable_baselines.common.policies import BasePolicy, nature_cnn, register_policy
  from stable_baselines.common.tf_layers import mlp
label_desc: Use image node_id 2 for calling the FeedForwardPolicy obj's underlying member method code with example usage: obj.make_actor(obs, reuse, scope) and returns: deterministic_policy,  policy,  logp_pi