code: def _build_q_net(self, name_):
      # actions are concatenated with flattened obs
      critic_hidden_activation = self.model_config[
          "critic_hidden_activation"
      ]
      critic_hiddens = self.model_config["critic_hiddens"]
  
      activation = get_activation_fn(
          critic_hidden_activation, framework="torch"
      )
      q_net = nn.Sequential()
      ins = (
          self.obs_ins
          if self._is_action_discrete
          else self.obs_ins + self.action_dim
      )
      for i, n in enumerate(critic_hiddens):
          q_net.add_module(
              f"{name_}_hidden_{i}",
              SlimFC(
                  ins,
                  n,
                  initializer=torch.nn.init.xavier_uniform_,
                  activation_fn=activation,
              ),
          )
          ins = n
  
      q_net.add_module(
          f"{name_}_out",
          SlimFC(
              ins,
              self.action_space.n if self._is_action_discrete else 1,
              initializer=torch.nn.init.xavier_uniform_,
              activation_fn=None,
          ),
      )
      return q_net
  
imports: from typing import Dict, List, Union
  import gymnasium
  import numpy
  from ray.rllib.models.torch.misc import SlimFC
  from ray.rllib.models.torch.torch_modelv2 import TorchModelV2
  from ray.rllib.models.utils import get_activation_fn
  from ray.rllib.utils.framework import try_import_torch
  from ray.rllib.utils.typing import ModelConfigDict, TensorType
label_desc: Use image node_id 3 for calling the CRRModel obj's underlying member method code with example usage: obj._build_q_net(name_) and returns: q_net