class_docstr: A model arch similar to FullyConnectedActor, except that the last layer
  represents the parameters of a multi-dimensional Gaussian distribution.
  The action to return is sampled from the Gaussian distribution.
docstr: Action is expected to be squashed with tanh
code: def get_log_prob(
      self, state: rlt.FeatureData, squashed_action: torch.Tensor
  ):
      """
      Action is expected to be squashed with tanh
      """
      if self.use_l2_normalization:
          # TODO: calculate log_prob for l2 normalization
          # https://math.stackexchange.com/questions/3120506/on-the-distribution-of-a-normalized-gaussian-vector
          # http://proceedings.mlr.press/v100/mazoure20a/mazoure20a.pdf
          pass
  
      loc, scale_log = self._get_loc_and_scale_log(state)
      raw_action = torch.atanh(squashed_action)
      r = (raw_action - loc) / scale_log.exp()
      log_prob = self._normal_log_prob(r, scale_log)
      squash_correction = self._squash_correction(squashed_action)
      if SummaryWriterContext._global_step % 1000 == 0:
          SummaryWriterContext.add_histogram(
              "actor/get_log_prob/loc", loc.detach().cpu()
          )
          SummaryWriterContext.add_histogram(
              "actor/get_log_prob/scale_log", scale_log.detach().cpu()
          )
          SummaryWriterContext.add_histogram(
              "actor/get_log_prob/log_prob", log_prob.detach().cpu()
          )
          SummaryWriterContext.add_histogram(
              "actor/get_log_prob/squash_correction",
              squash_correction.detach().cpu(),
          )
      return torch.sum(log_prob - squash_correction, dim=1).reshape(
          -1, 1
      )
  
imports: import math
  from typing import List, Optional
  import torch
  from reagent.core import types
  from reagent.core.parameters import CONTINUOUS_TRAINING_ACTION_RANGE
  from reagent.core.tensorboardX import SummaryWriterContext
  from reagent.models.base import ModelBase
  from reagent.models.fully_connected_network import FullyConnectedNetwork
  from torch.distributions import Dirichlet
  from torch.distributions.normal import Normal
label_desc: Use image node_id 8 for calling the GaussianFullyConnectedActor obj's underlying member method code with example usage: obj.get_log_prob(state, squashed_action) and returns: torch