code: def _adjust_lr(self, epoch):
      def set_lr(optimizer, decay_factor):
          for group in optimizer.param_groups:
              group["lr"] = group["lr"] * decay_factor
  
      epoch_diff = epoch - self.opt["lr_start_decay_epoch"]
      if (
          epoch_diff >= 0
          and epoch_diff % self.opt["lr_decay_per_epoch"] == 0
      ):
          if self.opt["learning_rate"] > self.opt["min_lr"]:
              set_lr(self.optimizer, self.opt["lr_decay_rate"])
              self.opt["learning_rate"] = (
                  self.opt["learning_rate"] * self.opt["lr_decay_rate"]
              )
              self.logger.info(
                  "Learning rate adjusted: {:.5f}".format(
                      self.opt["learning_rate"]
                  )
              )
  
imports: import os
  import resource
  import numpy
  import torch
  import torch.optim
  from torch.utils.data import DataLoader
  from torch.utils.tensorboard import SummaryWriter
  from graph4nlp.pytorch.models.graph2seq import Graph2Seq
  from graph4nlp.pytorch.models.graph2seq_loss import Graph2SeqLoss
  from graph4nlp.pytorch.modules.evaluation import BLEU
  from args import get_args
  from build_model import get_model
  from dataset import IWSLT14Dataset
  from utils import WarmupCosineSchedule, get_log, wordid2str
label_desc: Use image node_id 11 for calling the NMT obj's underlying member method code with example usage: obj._adjust_lr(epoch) without return types