class_docstr: Defines an abstract neural network model for use with RLlib.
  
  Custom models should extend either TFModelV2 or TorchModelV2 instead of
  this class directly.
  
  Data flow:
      obs -> forward() -> model_out
          \-> value_function() -> V(s)
class_docstr_tok: ["Defines","an","abstract","neural","network","model","for","use","with","RLlib",".","Custom","models","should","extend","either","TFModelV2","or","TorchModelV2","instead","of","this","class","directly",".","Data","flow",":","obs","-",">","forward","(",")","-",">","model_out","\\-",">","value_function","(",")","-",">","V","(","s",")"]
docstr: Override to customize the loss function used to optimize this model.
  
  This can be used to incorporate self-supervised losses (by defining
  a loss over existing input and output tensors of this model), and
  supervised losses (by defining losses over a variable-sharing copy of
  this model's layers).
  
  You can find an runnable example in examples/custom_loss.py.
  
  Args:
      policy_loss: List of or single policy loss(es) from the policy.
      loss_inputs: map of input placeholders for rollout data.
  
  Returns:
      List of or scalar tensor for the customized loss(es) for this
      model.
docstr_tok: ["Override","to","customize","the","loss","function","used","to","optimize","this","model",".","This","can","be","used","to","incorporate","self-supervised","losses","(","by","defining","a","loss","over","existing","input","and","output","tensors","of","this","model",")",",","and","supervised","losses","(","by","defining","losses","over","a","variable-sharing","copy","of","this","model","'s","layers",")",".","You","can","find","an","runnable","example","in","examples\/custom_loss.py",".","Args",":","policy_loss",":","List","of","or","single","policy","loss","(","es",")","from","the","policy",".","loss_inputs",":","map","of","input","placeholders","for","rollout","data",".","Returns",":","List","of","or","scalar","tensor","for","the","customized","loss","(","es",")","for","this","model","."]
code: def custom_loss(
      self, policy_loss: TensorType, loss_inputs: Dict[str, TensorType]
  ) -> Union[List[TensorType], TensorType]:
      """Override to customize the loss function used to optimize this model.
  
      This can be used to incorporate self-supervised losses (by defining
      a loss over existing input and output tensors of this model), and
      supervised losses (by defining losses over a variable-sharing copy of
      this model's layers).
  
      You can find an runnable example in examples/custom_loss.py.
  
      Args:
          policy_loss: List of or single policy loss(es) from the policy.
          loss_inputs: map of input placeholders for rollout data.
  
      Returns:
          List of or scalar tensor for the customized loss(es) for this
          model.
      """
      return policy_loss
  
imports: from collections import OrderedDict
  import contextlib
  import gymnasium
  from gymnasium.spaces import Space
  import numpy
  from typing import Dict, List, Any, Union
  from ray.rllib.models.preprocessors import get_preprocessor, RepeatedValuesPreprocessor
  from ray.rllib.models.repeated_values import RepeatedValues
  from ray.rllib.policy.sample_batch import SampleBatch
  from ray.rllib.policy.view_requirement import ViewRequirement
  from ray.rllib.utils import NullContextManager
  from ray.rllib.utils.annotations import DeveloperAPI, PublicAPI
  from ray.rllib.utils.deprecation import Deprecated
  from ray.rllib.utils.framework import try_import_tf, try_import_torch, TensorType
  from ray.rllib.utils.spaces.repeated import Repeated
  from ray.rllib.utils.typing import ModelConfigDict, ModelInputDict, TensorStructType
label_desc: Use image node_id 5 for calling the ModelV2 obj's underlying member method code with example usage: obj.custom_loss(policy_loss, loss_inputs) and returns: policy_loss