code: def build_q_network(
      self,
      state_normalization_data: NormalizationData,
      action_normalization_data: NormalizationData,
      output_dim: int = 1,
  ) -> ModelBase:
      state_dim = get_num_output_features(
          state_normalization_data.dense_normalization_parameters
      )
      action_dim = get_num_output_features(
          action_normalization_data.dense_normalization_parameters
      )
      return FullyConnectedCritic(
          state_dim=state_dim,
          action_dim=action_dim,
          sizes=self.sizes,
          activations=self.activations,
          use_batch_norm=self.use_batch_norm,
          use_layer_norm=self.use_layer_norm,
          output_dim=output_dim,
          final_activation=self.final_activation,
      )
  
file_path: ReAgent/reagent/net_builder/parametric_dqn/fully_connected.py
imports: from typing import List
  from reagent.core.dataclasses import dataclass, field
  from reagent.core.parameters import NormalizationData, param_hash
  from reagent.models.base import ModelBase
  from reagent.models.critic import FullyConnectedCritic
  from reagent.net_builder.parametric_dqn_net_builder import ParametricDQNNetBuilder
  from reagent.preprocessing.normalization import get_num_output_features
label_desc: Use image node_id 2 for calling the FullyConnected obj's underlying member method code with example usage: obj.build_q_network(state_normalization_data, action_normalization_data, output_dim) and returns: FullyConnectedCritic