code: def build_q_network(
      self,
      state_normalization_data: NormalizationData,
      output_dim: int,
      num_atoms: int,
      qmin: int,
      qmax: int,
  ) -> ModelBase:
      state_dim = self._get_input_dim(state_normalization_data)
      distributional_network = FullyConnectedDQN(
          state_dim=state_dim,
          action_dim=output_dim,
          num_atoms=num_atoms,
          sizes=self.sizes,
          activations=self.activations,
          use_batch_norm=False,
          dropout_ratio=0.0,
      )
      return CategoricalDQN(
          distributional_network,
          qmin=qmin,
          qmax=qmax,
          num_atoms=num_atoms,
      )
  
file_path: ReAgent/reagent/net_builder/categorical_dqn/categorical.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.categorical_dqn import CategoricalDQN
  from reagent.models.dqn import FullyConnectedDQN
  from reagent.net_builder.categorical_dqn_net_builder import CategoricalDQNNetBuilder
label_desc: Use image node_id 2 for calling the Categorical obj's underlying member method code with example usage: obj.build_q_network(state_normalization_data, output_dim, num_atoms, qmin, qmax) and returns: CategoricalDQN