def METHOD_NAME(self):
    """ Create optimizer and lr scheduler
    We provide a default implementation, if you want to customize your own optimizer
    and lr scheduler, you can either pass a tuple through trainer init function or
    subclass this class and override this method.
    """
    optimizer, lr_scheduler = self.optimizers
    if optimizer is None:
        optimizer_cfg = self.cfg.train.get('optimizer', None)
    else:
        optimizer_cfg = None
    optimizer_d_cfg = self.cfg.train.get('optimizer_d', None)
    optim_options = {}
    if optimizer_cfg is not None:
        optim_options = optimizer_cfg.pop('options', {})
        optimizer = build_optimizer(
            self.model.generator, cfg=optimizer_cfg)
    if optimizer_d_cfg is not None:
        optimizer_d = build_optimizer(
            self.model.discriminator, cfg=optimizer_d_cfg)
    lr_options = {}
    self.optimizer = optimizer
    self.lr_scheduler = lr_scheduler
    self.optimizer_d = optimizer_d
    return self.optimizer, self.lr_scheduler, optim_options, lr_options