class_docstr: ACER model that consists of a separate policy and V-function.
  
  Args:
      pi (Policy): Policy.
      v (torch.nn.Module): V-function, a callable mapping from a batch of
          observations to a (batch_size, 1)-shaped `torch.Tensor`.
      adv (StateActionQFunction): Advantage function.
      n (int): Number of samples used to evaluate Q-values.
class_docstr_tok: ["ACER","model","that","consists","of","a","separate","policy","and","V-function",".","Args",":","pi","(","Policy",")",":","Policy",".","v","(","torch.nn.Module",")",":","V-function",",","a","callable","mapping","from","a","batch","of","observations","to","a","(","batch_size",",","1",")","-shaped","`","torch.Tensor","`",".","adv","(","StateActionQFunction",")",":","Advantage","function",".","n","(","int",")",":","Number","of","samples","used","to","evaluate","Q-values","."]
code: def forward(self, obs):
      action_distrib = self.pi(obs)
      v = self.v(obs)
  
      def evaluator(action):
          adv_mean = (
              sum(
                  self.adv((obs, action_distrib.sample()))
                  for _ in range(self.n)
              )
              / self.n
          )
          return v + self.adv((obs, action)) - adv_mean
  
      action_value = SingleActionValue(evaluator)
  
      return action_distrib, action_value, v
  
imports: import copy
  from logging import getLogger
  import numpy
  import torch
  from torch import nn
  from pfrl import agent
  from pfrl.action_value import SingleActionValue
  from pfrl.utils import clip_l2_grad_norm_, copy_param
  from pfrl.utils.batch_states import batch_states
  from pfrl.utils.mode_of_distribution import mode_of_distribution
  from pfrl.utils.recurrent import detach_recurrent_state, one_step_forward
label_desc: Use image node_id 2 for calling the ACERContinuousActionHead obj's underlying member method code with example usage: obj.forward(obs) and returns: action_distrib,  action_value,  v, unknown