Python torch.optim.optimizer.Optimizer() Examples
The following are 30
code examples of torch.optim.optimizer.Optimizer().
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example.
You may also want to check out all available functions/classes of the module
torch.optim.optimizer
, or try the search function
.
Example #1
Source File: common.py From ignite with BSD 3-Clause "New" or "Revised" License | 6 votes |
def setup_mlflow_logging(trainer, optimizers=None, evaluators=None, log_every_iters=100, **kwargs): """Method to setup MLflow logging on trainer and a list of evaluators. Logged metrics are: - Training metrics, e.g. running average loss values - Learning rate(s) - Evaluation metrics Args: trainer (Engine): trainer engine optimizers (torch.optim.Optimizer or dict of torch.optim.Optimizer, optional): single or dictionary of torch optimizers. If a dictionary, keys are used as tags arguments for logging. evaluators (Engine or dict of Engine, optional): single or dictionary of evaluators. If a dictionary, keys are used as tags arguments for logging. log_every_iters (int, optional): interval for loggers attached to iteration events. To log every iteration, value can be set to 1 or None. **kwargs: optional keyword args to be passed to construct the logger. Returns: MLflowLogger """ logger = MLflowLogger(**kwargs) _setup_logging(logger, trainer, optimizers, evaluators, log_every_iters) return logger
Example #2
Source File: lr_scheduler.py From Global-Encoding with MIT License | 6 votes |
def __init__(self, optimizer, last_epoch=-1): if not isinstance(optimizer, Optimizer): raise TypeError('{} is not an Optimizer'.format( type(optimizer).__name__)) self.optimizer = optimizer if last_epoch == -1: for group in optimizer.param_groups: group.setdefault('initial_lr', group['lr']) else: for i, group in enumerate(optimizer.param_groups): if 'initial_lr' not in group: raise KeyError("param 'initial_lr' is not specified " "in param_groups[{}] when resuming an optimizer".format(i)) self.base_lrs = list(map(lambda group: group['initial_lr'], optimizer.param_groups)) self.step(last_epoch + 1) self.last_epoch = last_epoch
Example #3
Source File: hooks.py From pytorch-lightning with Apache License 2.0 | 6 votes |
def on_before_zero_grad(self, optimizer: Optimizer) -> None: """ Called after optimizer.step() and before optimizer.zero_grad(). Called in the training loop after taking an optimizer step and before zeroing grads. Good place to inspect weight information with weights updated. This is where it is called:: for optimizer in optimizers: optimizer.step() model.on_before_zero_grad(optimizer) # < ---- called here optimizer.zero_grad Args: optimizer: The optimizer for which grads should be zeroed. """ # do something with the optimizer or inspect it.
Example #4
Source File: hooks.py From pytorch-lightning with Apache License 2.0 | 6 votes |
def backward(self, trainer, loss: Tensor, optimizer: Optimizer, optimizer_idx: int) -> None: """ Override backward with your own implementation if you need to. Args: trainer: Pointer to the trainer loss: Loss is already scaled by accumulated grads optimizer: Current optimizer being used optimizer_idx: Index of the current optimizer being used Called to perform backward step. Feel free to override as needed. The loss passed in has already been scaled for accumulated gradients if requested. Example:: def backward(self, trainer, loss, optimizer, optimizer_idx): loss.backward() """ loss.backward()
Example #5
Source File: lr_scheduler.py From torch-toolbox with BSD 3-Clause "New" or "Revised" License | 6 votes |
def __init__(self, optimizer, batches, epochs, base_lr, target_lr=0, warmup_epochs=0, warmup_lr=0, last_iter=-1): if not isinstance(optimizer, Optimizer): raise TypeError('{} is not an Optimizer'.format( type(optimizer).__name__)) self.optimizer = optimizer if last_iter == -1: for group in optimizer.param_groups: group.setdefault('initial_lr', group['lr']) last_iter = 0 else: for i, group in enumerate(optimizer.param_groups): if 'initial_lr' not in group: raise KeyError( "param 'initial_lr' is not specified " "in param_groups[{}] when resuming an optimizer".format(i)) self.baselr = base_lr self.learning_rate = base_lr self.niters = epochs * batches self.targetlr = target_lr self.warmup_iters = batches * warmup_epochs self.warmup_lr = warmup_lr self.last_iter = last_iter self.step()
Example #6
Source File: wrapper.py From Holocron with MIT License | 6 votes |
def __init__(self, base_optimizer, sync_rate=0.5, sync_period=6): if sync_rate < 0 or sync_rate > 1: raise ValueError(f'expected positive float lower than 1 as sync_rate, received: {sync_rate}') if not isinstance(sync_period, int) or sync_period < 1: raise ValueError(f'expected positive integer as sync_period, received: {sync_period}') # Optimizer attributes self.defaults = dict(sync_rate=sync_rate, sync_period=sync_period) self.state = defaultdict(dict) # Base optimizer attributes self.base_optimizer = base_optimizer # Wrapper attributes self.fast_steps = 0 self.param_groups = [] for group in self.base_optimizer.param_groups: self._add_param_group(group) # Buffer for scouting self.buffer = [] for group in self.param_groups: for p in group['params']: self.buffer.append(p.data.unsqueeze(0))
Example #7
Source File: lr_scheduler.py From pytorch-lr-scheduler with GNU General Public License v2.0 | 6 votes |
def __init__(self, optimizer, mode='min', factor=0.1, patience=10, verbose=0, epsilon=1e-4, cooldown=0, min_lr=0): super(ReduceLROnPlateau, self).__init__() if factor >= 1.0: raise ValueError('ReduceLROnPlateau ' 'does not support a factor >= 1.0.') self.factor = factor self.min_lr = min_lr self.epsilon = epsilon self.patience = patience self.verbose = verbose self.cooldown = cooldown self.cooldown_counter = 0 # Cooldown counter. self.monitor_op = None self.wait = 0 self.best = 0 self.mode = mode assert isinstance(optimizer, Optimizer) self.optimizer = optimizer self._reset()
Example #8
Source File: learning_schedules.py From nutonomy_pointpillars with MIT License | 6 votes |
def __init__(self, optimizer, last_step=-1): if not isinstance(optimizer, Optimizer): raise TypeError('{} is not an Optimizer'.format( type(optimizer).__name__)) self.optimizer = optimizer if last_step == -1: for group in optimizer.param_groups: group.setdefault('initial_lr', group['lr']) else: for i, group in enumerate(optimizer.param_groups): if 'initial_lr' not in group: raise KeyError( "param 'initial_lr' is not specified " "in param_groups[{}] when resuming an optimizer". format(i)) self.base_lrs = list( map(lambda group: group['initial_lr'], optimizer.param_groups)) self.step(last_step + 1) self.last_step = last_step
Example #9
Source File: lr_scheduler.py From KOBE with MIT License | 6 votes |
def __init__(self, optimizer, last_epoch=-1): if not isinstance(optimizer, Optimizer): raise TypeError('{} is not an Optimizer'.format( type(optimizer).__name__)) self.optimizer = optimizer if last_epoch == -1: for group in optimizer.param_groups: group.setdefault('initial_lr', group['lr']) else: for i, group in enumerate(optimizer.param_groups): if 'initial_lr' not in group: raise KeyError("param 'initial_lr' is not specified " "in param_groups[{}] when resuming an optimizer".format(i)) self.base_lrs = list( map(lambda group: group['initial_lr'], optimizer.param_groups)) self.step(last_epoch + 1) self.last_epoch = last_epoch
Example #10
Source File: common.py From ignite with BSD 3-Clause "New" or "Revised" License | 6 votes |
def setup_tb_logging(output_path, trainer, optimizers=None, evaluators=None, log_every_iters=100, **kwargs): """Method to setup TensorBoard logging on trainer and a list of evaluators. Logged metrics are: - Training metrics, e.g. running average loss values - Learning rate(s) - Evaluation metrics Args: output_path (str): logging directory path trainer (Engine): trainer engine optimizers (torch.optim.Optimizer or dict of torch.optim.Optimizer, optional): single or dictionary of torch optimizers. If a dictionary, keys are used as tags arguments for logging. evaluators (Engine or dict of Engine, optional): single or dictionary of evaluators. If a dictionary, keys are used as tags arguments for logging. log_every_iters (int, optional): interval for loggers attached to iteration events. To log every iteration, value can be set to 1 or None. **kwargs: optional keyword args to be passed to construct the logger. Returns: TensorboardLogger """ logger = TensorboardLogger(log_dir=output_path, **kwargs) _setup_logging(logger, trainer, optimizers, evaluators, log_every_iters) return logger
Example #11
Source File: common.py From ignite with BSD 3-Clause "New" or "Revised" License | 6 votes |
def setup_visdom_logging(trainer, optimizers=None, evaluators=None, log_every_iters=100, **kwargs): """Method to setup Visdom logging on trainer and a list of evaluators. Logged metrics are: - Training metrics, e.g. running average loss values - Learning rate(s) - Evaluation metrics Args: trainer (Engine): trainer engine optimizers (torch.optim.Optimizer or dict of torch.optim.Optimizer, optional): single or dictionary of torch optimizers. If a dictionary, keys are used as tags arguments for logging. evaluators (Engine or dict of Engine, optional): single or dictionary of evaluators. If a dictionary, keys are used as tags arguments for logging. log_every_iters (int, optional): interval for loggers attached to iteration events. To log every iteration, value can be set to 1 or None. **kwargs: optional keyword args to be passed to construct the logger. Returns: VisdomLogger """ logger = VisdomLogger(**kwargs) _setup_logging(logger, trainer, optimizers, evaluators, log_every_iters) return logger
Example #12
Source File: lr_scheduler.py From albert_pytorch with Apache License 2.0 | 6 votes |
def __init__(self, optimizer, mode='min', factor=0.1, patience=10, verbose=0, epsilon=1e-4, cooldown=0, min_lr=0,eps=1e-8): super(ReduceLROnPlateau, self).__init__() assert isinstance(optimizer, Optimizer) if factor >= 1.0: raise ValueError('ReduceLROnPlateau ' 'does not support a factor >= 1.0.') self.factor = factor self.min_lr = min_lr self.epsilon = epsilon self.patience = patience self.verbose = verbose self.cooldown = cooldown self.cooldown_counter = 0 # Cooldown counter. self.monitor_op = None self.wait = 0 self.best = 0 self.mode = mode self.optimizer = optimizer self.eps = eps self._reset()
Example #13
Source File: common.py From ignite with BSD 3-Clause "New" or "Revised" License | 6 votes |
def setup_neptune_logging(trainer, optimizers=None, evaluators=None, log_every_iters=100, **kwargs): """Method to setup Neptune logging on trainer and a list of evaluators. Logged metrics are: - Training metrics, e.g. running average loss values - Learning rate(s) - Evaluation metrics Args: trainer (Engine): trainer engine optimizers (torch.optim.Optimizer or dict of torch.optim.Optimizer, optional): single or dictionary of torch optimizers. If a dictionary, keys are used as tags arguments for logging. evaluators (Engine or dict of Engine, optional): single or dictionary of evaluators. If a dictionary, keys are used as tags arguments for logging. log_every_iters (int, optional): interval for loggers attached to iteration events. To log every iteration, value can be set to 1 or None. **kwargs: optional keyword args to be passed to construct the logger. Returns: NeptuneLogger """ logger = NeptuneLogger(**kwargs) _setup_logging(logger, trainer, optimizers, evaluators, log_every_iters) return logger
Example #14
Source File: common.py From ignite with BSD 3-Clause "New" or "Revised" License | 6 votes |
def setup_plx_logging(trainer, optimizers=None, evaluators=None, log_every_iters=100, **kwargs): """Method to setup Polyaxon logging on trainer and a list of evaluators. Logged metrics are: - Training metrics, e.g. running average loss values - Learning rate(s) - Evaluation metrics Args: trainer (Engine): trainer engine optimizers (torch.optim.Optimizer or dict of torch.optim.Optimizer, optional): single or dictionary of torch optimizers. If a dictionary, keys are used as tags arguments for logging. evaluators (Engine or dict of Engine, optional): single or dictionary of evaluators. If a dictionary, keys are used as tags arguments for logging. log_every_iters (int, optional): interval for loggers attached to iteration events. To log every iteration, value can be set to 1 or None. **kwargs: optional keyword args to be passed to construct the logger. Returns: PolyaxonLogger """ logger = PolyaxonLogger(**kwargs) _setup_logging(logger, trainer, optimizers, evaluators, log_every_iters) return logger
Example #15
Source File: common.py From ignite with BSD 3-Clause "New" or "Revised" License | 6 votes |
def setup_trains_logging(trainer, optimizers=None, evaluators=None, log_every_iters=100, **kwargs): """Method to setup Trains logging on trainer and a list of evaluators. Logged metrics are: - Training metrics, e.g. running average loss values - Learning rate(s) - Evaluation metrics Args: trainer (Engine): trainer engine optimizers (torch.optim.Optimizer or dict of torch.optim.Optimizer, optional): single or dictionary of torch optimizers. If a dictionary, keys are used as tags arguments for logging. evaluators (Engine or dict of Engine, optional): single or dictionary of evaluators. If a dictionary, keys are used as tags arguments for logging. log_every_iters (int, optional): interval for loggers attached to iteration events. To log every iteration, value can be set to 1 or None. **kwargs: optional keyword args to be passed to construct the logger. Returns: TrainsLogger """ logger = TrainsLogger(**kwargs) _setup_logging(logger, trainer, optimizers, evaluators, log_every_iters) return logger
Example #16
Source File: param_scheduler.py From ignite with BSD 3-Clause "New" or "Revised" License | 6 votes |
def __init__(self, optimizer, param_name, save_history=False, param_group_index=None): if not ( isinstance(optimizer, Optimizer) or (hasattr(optimizer, "param_groups") and isinstance(optimizer.param_groups, Sequence)) ): raise TypeError( "Argument optimizer should be torch.optim.Optimizer or has attribute 'param_groups' as list/tuple, " "but given {}".format(type(optimizer)) ) self.optimizer = optimizer self.param_group_index = param_group_index self.param_name = param_name self.save_history = save_history self.event_index = 0 self._state_attrs = ["event_index", "param_name", "save_history", "param_group_index"]
Example #17
Source File: lr_scheduler.py From DAIN with MIT License | 6 votes |
def __init__(self, optimizer, last_epoch=-1): if not isinstance(optimizer, Optimizer): raise TypeError('{} is not an Optimizer'.format( type(optimizer).__name__)) self.optimizer = optimizer if last_epoch == -1: for group in optimizer.param_groups: group.setdefault('initial_lr', group['lr']) else: for i, group in enumerate(optimizer.param_groups): if 'initial_lr' not in group: raise KeyError("param 'initial_lr' is not specified " "in param_groups[{}] when resuming an optimizer".format(i)) self.base_lrs = list(map(lambda group: group['initial_lr'], optimizer.param_groups)) self.step(last_epoch + 1) self.last_epoch = last_epoch
Example #18
Source File: scheduler.py From camera_identification with MIT License | 6 votes |
def __init__(self, optimizer, mode='min', factor=0.1, patience=10, verbose=0, epsilon=1e-4, cooldown=0, min_lr=0): super(ReduceLROnPlateau, self).__init__() if factor >= 1.0: raise ValueError('ReduceLROnPlateau ' 'does not support a factor >= 1.0.') self.factor = factor self.min_lr = min_lr self.epsilon = epsilon self.patience = patience self.verbose = verbose self.cooldown = cooldown self.cooldown_counter = 0 # Cooldown counter. self.monitor_op = None self.wait = 0 self.best = 0 self.mode = mode assert isinstance(optimizer, Optimizer) self.optimizer = optimizer self._reset()
Example #19
Source File: optimizers.py From asteroid with MIT License | 6 votes |
def make_optimizer(params, optimizer='adam', **kwargs): """ Args: params (iterable): Output of `nn.Module.parameters()`. optimizer (str or :class:`torch.optim.Optimizer`): Identifier understood by :func:`~.get`. **kwargs (dict): keyword arguments for the optimizer. Returns: torch.optim.Optimizer Examples: >>> from torch import nn >>> model = nn.Sequential(nn.Linear(10, 10)) >>> optimizer = make_optimizer(model.parameters(), optimizer='sgd', >>> lr=1e-3) """ return get(optimizer)(params, **kwargs)
Example #20
Source File: optimizers.py From asteroid with MIT License | 6 votes |
def get(identifier): """ Returns an optimizer function from a string. Returns its input if it is callable (already a :class:`torch.optim.Optimizer` for example). Args: identifier (str or Callable): the optimizer identifier. Returns: :class:`torch.optim.Optimizer` or None """ if isinstance(identifier, Optimizer): return identifier elif isinstance(identifier, str): to_get = {k.lower(): v for k, v in globals().items()} cls = to_get.get(identifier.lower()) if cls is None: raise ValueError(f'Could not interpret optimizer : {str(identifier)}') return cls raise ValueError(f'Could not interpret optimizer : {str(identifier)}')
Example #21
Source File: learning_schedules.py From Det3D with Apache License 2.0 | 6 votes |
def __init__(self, optimizer, last_step=-1): if not isinstance(optimizer, Optimizer): raise TypeError("{} is not an Optimizer".format(type(optimizer).__name__)) self.optimizer = optimizer if last_step == -1: for group in optimizer.param_groups: group.setdefault("initial_lr", group["lr"]) else: for i, group in enumerate(optimizer.param_groups): if "initial_lr" not in group: raise KeyError( "param 'initial_lr' is not specified " "in param_groups[{}] when resuming an optimizer".format(i) ) self.base_lrs = list( map(lambda group: group["initial_lr"], optimizer.param_groups) ) self.step(last_step + 1) self.last_step = last_step
Example #22
Source File: lr_schedulers.py From Bert-Multi-Label-Text-Classification with MIT License | 6 votes |
def __init__(self, optimizer, mode='min', factor=0.1, patience=10, verbose=0, epsilon=1e-4, cooldown=0, min_lr=0,eps=1e-8): super(ReduceLROnPlateau, self).__init__() assert isinstance(optimizer, Optimizer) if factor >= 1.0: raise ValueError('ReduceLROnPlateau ' 'does not support a factor >= 1.0.') self.factor = factor self.min_lr = min_lr self.epsilon = epsilon self.patience = patience self.verbose = verbose self.cooldown = cooldown self.cooldown_counter = 0 # Cooldown counter. self.monitor_op = None self.wait = 0 self.best = 0 self.mode = mode self.optimizer = optimizer self.eps = eps self._reset()
Example #23
Source File: saver.py From L3C-PyTorch with GNU General Public License v3.0 | 6 votes |
def restore(self, modules, ckpt_p, strict=True, restore_restart=False): print('Restoring {}... (strict={})'.format(ckpt_p, strict)) map_location = None if pe.CUDA_AVAILABLE else 'cpu' state_dicts = torch.load(ckpt_p, map_location=map_location) # --- for key, m in modules.items(): # optim implements its own load_state_dict which does not have the `strict` keyword... if isinstance(m, optimizer.Optimizer): if restore_restart: print('Not restoring optimizer, --restore_restart given...') else: try: m.load_state_dict(state_dicts[key]) except ValueError as e: raise ValueError('Error while restoring Optimizer:', str(e)) else: try: m.load_state_dict(state_dicts[key], strict=strict) except RuntimeError as e: # loading error for n, module in sorted(m.named_modules()): print(n, module) raise e return self.get_itr_from_ckpt_p(ckpt_p)
Example #24
Source File: lr_scheduler.py From Parsing-R-CNN with MIT License | 6 votes |
def __init__(self, optimizer, solver, start_iter=1, iter_per_epoch=-1, local_rank=0): if not isinstance(optimizer, Optimizer): raise TypeError('{} is not an Optimizer'.format(type(optimizer).__name__)) self.optimizer = optimizer self.solver = solver assert self.solver.LR_POLICY in ['STEP', 'COSINE', 'STEP_COSINE', 'POLY'] assert self.solver.WARM_UP_METHOD in ['CONSTANT', 'LINEAR'] self.base_lr = self.solver.BASE_LR self.new_lr = self.base_lr self.iteration = start_iter self.iter_per_epoch = iter_per_epoch self.local_rank = local_rank self.info = dict(best_acc=0.0, best_epoch=1, cur_acc=0.0, cur_epoch=1) if 'MAX_ITER' in self.solver: self.max_iter = self.solver.MAX_ITER self.warm_up_iters = self.solver.WARM_UP_ITERS self.steps = self.solver.STEPS # only useful for step policy else: assert self.iter_per_epoch > 0 # need to specify the iter_per_epoch self.conver_epoch2iter()
Example #25
Source File: logging_manager.py From emmental with MIT License | 6 votes |
def checkpoint_model( self, model: EmmentalModel, optimizer: Optimizer, lr_scheduler: _LRScheduler, metric_dict: Dict[str, float], ) -> None: """Checkpoint the model. Args: model: The model to checkpoint. optimizer: The optimizer used during training process. lr_scheduler: Learning rate scheduler. metric_dict: the metric dict. """ self.checkpointer.checkpoint( self.unit_total, model, optimizer, lr_scheduler, metric_dict )
Example #26
Source File: util.py From sparktorch with MIT License | 6 votes |
def serialize_torch_obj( model: nn.Module, criterion: Any, optimizer: Type[Optimizer], **kwargs ) -> str: model_encoded = torch_encoder( TorchObj( model=model, criterion=criterion, optimizer=optimizer, optimizer_params=kwargs, is_lazy=False, model_parameters=None ) ) return json.dumps({ 'torch_obj': model_encoded, 'shapes': [list(ps.shape) for ps in model.parameters()] })
Example #27
Source File: learning_schedules.py From second.pytorch with MIT License | 6 votes |
def __init__(self, optimizer, last_step=-1): if not isinstance(optimizer, Optimizer): raise TypeError('{} is not an Optimizer'.format( type(optimizer).__name__)) self.optimizer = optimizer if last_step == -1: for group in optimizer.param_groups: group.setdefault('initial_lr', group['lr']) else: for i, group in enumerate(optimizer.param_groups): if 'initial_lr' not in group: raise KeyError( "param 'initial_lr' is not specified " "in param_groups[{}] when resuming an optimizer". format(i)) self.base_lrs = list( map(lambda group: group['initial_lr'], optimizer.param_groups)) self.step(last_step + 1) self.last_step = last_step
Example #28
Source File: lamb.py From catalyst with Apache License 2.0 | 5 votes |
def _log_lamb_rs(optimizer: Optimizer, event_writer, token_count: int): """Log a histogram of trust ratio scalars in across layers.""" results = collections.defaultdict(list) for group in optimizer.param_groups: for p in group["params"]: state = optimizer.state[p] for i in ("weight_norm", "adam_norm", "trust_ratio"): if i in state: results[i].append(state[i]) for k, v in results.items(): event_writer.add_histogram(f"lamb/{k}", torch.tensor(v), token_count)
Example #29
Source File: lr_schedulers.py From Bert-Multi-Label-Text-Classification with MIT License | 5 votes |
def __init__(self, optimizer, batch_size, epoch_size, restart_period=100, t_mult=2, last_epoch=-1, eta_threshold=1000, verbose=False): if not isinstance(optimizer, Optimizer): raise TypeError('{} is not an Optimizer'.format( type(optimizer).__name__)) self.optimizer = optimizer if last_epoch == -1: for group in optimizer.param_groups: group.setdefault('initial_lr', group['lr']) else: for i, group in enumerate(optimizer.param_groups): if 'initial_lr' not in group: raise KeyError("param 'initial_lr' is not specified " "in param_groups[{}] when resuming an" " optimizer".format(i)) self.base_lrs = list(map(lambda group: group['initial_lr'], optimizer.param_groups)) self.last_epoch = last_epoch self.batch_size = batch_size self.iteration = 0 self.epoch_size = epoch_size self.eta_threshold = eta_threshold self.t_mult = t_mult self.verbose = verbose self.base_weight_decays = list(map(lambda group: group['weight_decay'], optimizer.param_groups)) self.restart_period = restart_period self.restarts = 0 self.t_epoch = -1 self.batch_increments = [] self._set_batch_increment()
Example #30
Source File: lr_scheduler.py From Global-Encoding with MIT License | 5 votes |
def __init__(self, optimizer, mode='min', factor=0.1, patience=10, verbose=False, threshold=1e-4, threshold_mode='rel', cooldown=0, min_lr=0, eps=1e-8): if factor >= 1.0: raise ValueError('Factor should be < 1.0.') self.factor = factor if not isinstance(optimizer, Optimizer): raise TypeError('{} is not an Optimizer'.format( type(optimizer).__name__)) self.optimizer = optimizer if isinstance(min_lr, list) or isinstance(min_lr, tuple): if len(min_lr) != len(optimizer.param_groups): raise ValueError("expected {} min_lrs, got {}".format( len(optimizer.param_groups), len(min_lr))) self.min_lrs = list(min_lr) else: self.min_lrs = [min_lr] * len(optimizer.param_groups) self.patience = patience self.verbose = verbose self.cooldown = cooldown self.cooldown_counter = 0 self.mode = mode self.threshold = threshold self.threshold_mode = threshold_mode self.best = None self.num_bad_epochs = None self.mode_worse = None # the worse value for the chosen mode self.is_better = None self.eps = eps self.last_epoch = -1 self._init_is_better(mode=mode, threshold=threshold, threshold_mode=threshold_mode) self._reset()