code: def __init__(
      self,
      config_obj: ModelConfig,
      random_seed: int = None,
      **_kwargs,
  ):
      self.config_obj = config_obj
      self._random_seed = random_seed
  
      super().__init__(random_seed=self._random_seed)
  
      # ================ Inputs ================
      try:
          self.input_features.update(
              self.build_inputs(
                  input_feature_configs=self.config_obj.input_features
              )
          )
      except KeyError as e:
          raise KeyError(
              f"An input feature has a name that conflicts with a class attribute of torch's ModuleDict: {e}"
          )
  
      # ================ Outputs ================
      self.output_features.update(
          self.build_outputs(
              output_feature_configs=self.config_obj.output_features,
              input_size=self.input_shape[-1],
          )
      )
  
      self.lgbm_model: lgb.LGBMModel = None
      self.compiled_model: torch.nn.Module = None
  
imports: import os
  from contextlib import contextmanager
  from typing import Dict, Optional, Tuple, Union
  import lightgbm
  import numpy
  import torch
  from hummingbird.ml import convert
  from ludwig.accounting.used_tokens import get_used_tokens_for_gbm
  from ludwig.constants import BINARY, LOGITS, MODEL_GBM, NUMBER, USED_TOKENS
  from ludwig.features.base_feature import OutputFeature
  from ludwig.globals import MODEL_WEIGHTS_FILE_NAME
  from ludwig.models.base import BaseModel
  from ludwig.schema.features.base import BaseOutputFeatureConfig, FeatureCollection
  from ludwig.schema.model_config import ModelConfig
  from ludwig.utils import output_feature_utils
  from ludwig.utils.fs_utils import path_exists
  from ludwig.utils.gbm_utils import reshape_logits
  from ludwig.utils.torch_utils import get_torch_device
  from ludwig.utils.types import TorchDevice
label_desc: Use image node_id 2 to create a new GBM object from inherited base classes: BaseModel with example: obj = GBM(config_obj, random_seed)