code: def _build_optimizer(self):
      parameters = [
          p for p in self.model.parameters() if p.requires_grad
      ]
      self.optimizer = optim.Adam(parameters, lr=self.config["lr"])
      self.stopper = EarlyStopping(
          os.path.join(
              self.config["out_dir"], Constants._SAVED_WEIGHTS_FILE
          ),
          patience=self.config["patience"],
      )
      self.scheduler = ReduceLROnPlateau(
          self.optimizer,
          mode="max",
          factor=self.config["lr_reduce_factor"],
          patience=self.config["lr_patience"],
          verbose=True,
      )
  
imports: import argparse
  import os
  import time
  import numpy
  import torch
  import torch.backends.cudnn
  import torch.optim
  from torch.optim.lr_scheduler import ReduceLROnPlateau
  from torch.utils.data import DataLoader
  from graph4nlp.pytorch.datasets.cnn import CNNDataset
  from graph4nlp.pytorch.modules.config import get_basic_args
  from graph4nlp.pytorch.modules.evaluation.rouge import ROUGE
  from graph4nlp.pytorch.modules.utils import constants
  from graph4nlp.pytorch.modules.utils.config_utils import get_yaml_config, update_values
  from graph4nlp.pytorch.modules.utils.copy_utils import prepare_ext_vocab
  from graph4nlp.pytorch.modules.utils.generic_utils import EarlyStopping, to_cuda
  from graph4nlp.pytorch.modules.utils.logger import Logger
  from graph4nlp.pytorch.modules.utils.summarization_utils import wordid2str
  from main import SumModel
label_desc: Use image node_id 4 for calling the ModelHandler obj's underlying member method code with example usage: obj._build_optimizer() without return types