EarlyStopping#
- class ignite.handlers.early_stopping.EarlyStopping(patience, score_function, trainer, threshold=0.0, cumulative=False, threshold_mode='abs', mode='max', min_delta=None, min_delta_mode=None, cumulative_delta=None)[source]#
EarlyStopping handler can be used to stop the training if no improvement after a given number of events.
- Parameters:
patience (int) – Number of events to wait if no improvement and then stop the training.
score_function (Callable) – It should be a function taking a single argument, an
Engineobject, and return a scorefloat. An improvement is considered if the score is higher (formode='max') or lower (formode='min').trainer (Engine) – Trainer engine to stop the run if no improvement.
threshold (float) – A minimum change in the score to qualify as an improvement. For
mode='max', it is a minimum increase; formode='min', it is a minimum decrease. An improvement is only considered if the change exceeds the threshold determined bythresholdandthreshold_mode.cumulative (bool) – If True,
thresholddefines the change since the lastpatiencereset, otherwise it defines the change after the last event. Default value is False.threshold_mode (Literal['abs', 'rel']) –
Determines whether
thresholdis an absolute change or a relative change.In
'abs'mode:For
mode='max': improvement ifscore > best_score + thresholdFor
mode='min': improvement ifscore < best_score - threshold
In
'rel'mode:For
mode='max': improvement ifscore > best_score * (1 + threshold)For
mode='min': improvement ifscore < best_score * (1 - threshold)
Possible values are
"abs"and"rel". Default value is"abs".mode (Literal['min', 'max']) – Whether to maximize (
'max') or minimize ('min') the score. Default is'max'.min_delta (float | None) –
min_delta_mode (Literal['abs', 'rel'] | None) –
cumulative_delta (bool | None) –
Examples
from ignite.engine import Engine, Events from ignite.handlers import EarlyStopping def score_function(engine): val_loss = engine.state.metrics["nll"] return -val_loss handler = EarlyStopping( patience=10, score_function=score_function, trainer=trainer, ) # Note: the handler is attached to an *Evaluator* evaluator.add_event_handler(Events.COMPLETED, handler)
Changed in version 0.6.0: Renamed
min_delta_modetothreshold_mode. Renamedmin_deltatothreshold. Renamedcumulative_deltatocumulative. Addedget_default_score_fn()andget_default_event_filter()static helpers.Changed in version 0.5.4: Added mode parameter to support minimization in addition to maximization. Added min_delta_mode parameter to support both absolute and relative improvements.
Methods
Attaches the early stopping handler to an engine and registers its reset callback.
Build an event filter that delays early-stopping checks until the trainer has completed at least
afterepochs.Helper method to build a score function from an engine metric name.
Method replace internal state of the class with provided state dict data.
Reset the early stopping state, including the counter and best score.
Method returns state dict with
counterandbest_score.- attach(engine, event=Events.COMPLETED, reset_engine=None, reset_event=Events.STARTED, *args, **kwargs)[source]#
Attaches the early stopping handler to an engine and registers its reset callback.
This method will: 1. Add the early stopping evaluation logic (
self) toengineon the givenevent. 2. Add theresetmethod toreset_engine(orengineif not provided) on the givenreset_event.- Parameters:
engine (Engine) – The engine to attach the early stopping evaluation to (typically an evaluator).
event (Any) – The event on
enginethat triggers the early stopping check. Default isCOMPLETED.reset_engine (Engine | None) – The engine to attach the reset callback to (typically the trainer). If
None, defaults toengine.reset_event (Any) – The event on
reset_enginethat triggers the handler state reset. Default isSTARTED.args (Any) –
kwargs (Any) –
- Return type:
None
New in version 0.5.4.
- get_default_event_filter(after)[source]#
Build an event filter that delays early-stopping checks until the trainer has completed at least
afterepochs.This implements a warmup window for early stopping without coupling the warmup logic to the handler itself, so it composes with any event the handler is attached to (epoch, iteration, custom). The filter consults the trainer’s epoch counter (
self.trainer.state.epoch) rather than the host engine’s event count, so the warmup is well-defined even when the handler is attached to an evaluator that re-runs from scratch each epoch.- Parameters:
after (int) – minimum number of trainer epochs that must have completed before the early-stopping handler is allowed to run. Must be a non-negative integer.
- Returns:
A callable matching the
event_filtersignature(engine, event) -> bool.- Return type:
Examples
from ignite.engine import Events from ignite.handlers import EarlyStopping handler = EarlyStopping(patience=5, score_function=score_fn, trainer=trainer) # Skip the first 3 trainer epochs, then enforce early stopping. evaluator.add_event_handler( Events.COMPLETED(event_filter=handler.get_default_event_filter(after=3)), handler, )
New in version 0.6.0.
- static get_default_score_fn(metric_name, score_sign=1.0)[source]#
Helper method to build a score function from an engine metric name.
The returned callable reads
engine.state.metrics[metric_name]and multiplies it byscore_sign. Usescore_sign=-1.0for error-like metrics (smaller is better) when the handler is configured withmode="max"so that decreases in the metric register as score improvements.- Parameters:
- Returns:
A callable taking an
Engineand returningfloat.- Return type:
Examples
from ignite.handlers import EarlyStopping # Validation accuracy: larger is better, default mode="max" score_fn = EarlyStopping.get_default_score_fn("accuracy") handler = EarlyStopping(patience=5, score_function=score_fn, trainer=trainer) # Validation loss: smaller is better, flip the sign so larger is better neg_loss_fn = EarlyStopping.get_default_score_fn("loss", -1.0) handler = EarlyStopping(patience=5, score_function=neg_loss_fn, trainer=trainer)
New in version 0.6.0.
- load_state_dict(state_dict)[source]#
Method replace internal state of the class with provided state dict data.
- Parameters:
state_dict (Mapping) – a dict with “counter” and “best_score” keys/values.
- Return type:
None
- reset()[source]#
Reset the early stopping state, including the counter and best score.
New in version 0.5.4.
- Return type:
None