class_docstr: Assigns the `_value()` method to a TFPolicy.
  
  This way, Policy can call `_value()` to get the current VF estimate on a
  single(!) observation (as done in `postprocess_trajectory_fn`).
  Note: When doing this, an actual forward pass is being performed.
  This is different from only calling `model.value_function()`, where
  the result of the most recent forward pass is being used to return an
  already calculated tensor.
code: def _extra_action_out_impl(self) -> Dict[str, TensorType]:
      extra_action_out = super().extra_action_out_fn()
      # Keras models return values for each call in third return argument
      # (dict).
      if isinstance(self.model, tf.keras.Model):
          return extra_action_out
      # Return value function outputs. VF estimates will hence be added to the
      # SampleBatches produced by the sampler(s) to generate the train batches
      # going into the loss function.
      extra_action_out.update(
          {
              SampleBatch.VF_PREDS: self.model.value_function(),
          }
      )
      return extra_action_out
  
imports: import logging
  from typing import Dict, List
  import numpy
  from ray.rllib.models.modelv2 import ModelV2
  from ray.rllib.policy.eager_tf_policy import EagerTFPolicy
  from ray.rllib.policy.eager_tf_policy_v2 import EagerTFPolicyV2
  from ray.rllib.policy.policy import Policy, PolicyState
  from ray.rllib.policy.sample_batch import SampleBatch
  from ray.rllib.policy.tf_policy import TFPolicy
  from ray.rllib.utils.annotations import DeveloperAPI, override
  from ray.rllib.utils.framework import get_variable, try_import_tf
  from ray.rllib.utils.schedules import PiecewiseSchedule
  from ray.rllib.utils.tf_utils import make_tf_callable
  from ray.rllib.utils.typing import AlgorithmConfigDict, LocalOptimizer, ModelGradients, TensorType
label_desc: Use image node_id 2 for calling the ValueNetworkMixin obj's underlying member method code with example usage: obj._extra_action_out_impl() and returns: extra_action_out, extra_action_out