callbacks.tracker
Callbacks that take decisions depending on the evolution of metrics during training
Tracking Callbacks
This module regroups the callbacks that track one of the metrics computed at the end of each epoch to take some decision about training. To show examples of use, we’ll use our sample of MNIST and a simple cnn model.
path = untar_data(URLs.MNIST_SAMPLE)
data = ImageDataBunch.from_folder(path)
class
TerminateOnNaNCallback
[source][test]
TerminateOnNaNCallback
() ::Callback
No tests found forTerminateOnNaNCallback
. To contribute a test please refer to this guide and this discussion.
A Callback
that terminates training if loss is NaN.
Sometimes, training diverges and the loss goes to nan. In that case, there’s no point continuing, so this callback stops the training.
model = simple_cnn((3,16,16,2))
learn = Learner(data, model, metrics=[accuracy])
learn.fit_one_cycle(1,1e4)
epoch | train_loss | valid_loss | accuracy | time |
---|---|---|---|---|
0 | nan | nan | 0.495584 | 00:04 |
Using it prevents that situation to happen.
model = simple_cnn((3,16,16,2))
learn = Learner(data, model, metrics=[accuracy], callbacks=[TerminateOnNaNCallback()])
learn.fit(2,1e4)
0.00% [0/2 00:00<00:00]
epoch | train_loss | valid_loss | accuracy | time |
---|
Interrupted
Epoch/Batch (0/5): Invalid loss, terminating training.
Callback methods
You don’t call these yourself - they’re called by fastai’s Callback
system automatically to enable the class’s functionality.
on_batch_end
[source][test]
on_batch_end
(last_loss
,epoch
,num_batch
, **kwargs
:Any
) No tests found foron_batch_end
. To contribute a test please refer to this guide and this discussion.
Test if last_loss
is NaN and interrupts training.
on_epoch_end
[source][test]
on_epoch_end
(**kwargs
:Any
) No tests found foron_epoch_end
. To contribute a test please refer to this guide and this discussion.
Called at the end of an epoch.
class
EarlyStoppingCallback
[source][test]
EarlyStoppingCallback
(learn
:Learner
,monitor
:str
='valid_loss'
,mode
:str
='auto'
,min_delta
:int
=0
,patience
:int
=0
) ::TrackerCallback
No tests found forEarlyStoppingCallback
. To contribute a test please refer to this guide and this discussion.
A TrackerCallback
that terminates training when monitored quantity stops improving.
This callback tracks the quantity in monitor
during the training of learn
. mode
can be forced to ‘min’ or ‘max’ but will automatically try to determine if the quantity should be the lowest possible (validation loss) or the highest possible (accuracy). Will stop training after patience
epochs if the quantity hasn’t improved by min_delta
.
model = simple_cnn((3,16,16,2))
learn = Learner(data, model, metrics=[accuracy],
callback_fns=[partial(EarlyStoppingCallback, monitor='accuracy', min_delta=0.01, patience=3)])
learn.fit(50,1e-42)
8.00% [4/50 00:16<03:12]
epoch | train_loss | valid_loss | accuracy | time |
---|---|---|---|---|
0 | 0.689492 | 0.690565 | 0.518646 | 00:04 |
1 | 0.689430 | 0.690565 | 0.518646 | 00:04 |
2 | 0.688645 | 0.690565 | 0.518646 | 00:04 |
3 | 0.689386 | 0.690565 | 0.518646 | 00:04 |
100.00% [32/32 00:00<00:00]
Epoch 4: early stopping
Callback methods
You don’t call these yourself - they’re called by fastai’s Callback
system automatically to enable the class’s functionality.
on_train_begin
[source][test]
on_train_begin
(**kwargs
:Any
) No tests found foron_train_begin
. To contribute a test please refer to this guide and this discussion.
Initialize inner arguments.
on_epoch_end
[source][test]
on_epoch_end
(epoch
, **kwargs
:Any
) No tests found foron_epoch_end
. To contribute a test please refer to this guide and this discussion.
Compare the value monitored to its best score and maybe stop training.
class
SaveModelCallback
[source][test]
SaveModelCallback
(learn
:Learner
,monitor
:str
='valid_loss'
,mode
:str
='auto'
,every
:str
='improvement'
,name
:str
='bestmodel'
) ::TrackerCallback
No tests found forSaveModelCallback
. To contribute a test please refer to this guide and this discussion.
A TrackerCallback
that saves the model when monitored quantity is best.
This callback tracks the quantity in monitor
during the training of learn
. mode
can be forced to ‘min’ or ‘max’ but will automatically try to determine if the quantity should be the lowest possible (validation loss) or the highest possible (accuracy). Will save the model in name
whenever determined by every
(‘improvement’ or ‘epoch’). Loads the best model at the end of training is every='improvement'
.
model = simple_cnn((3,16,16,2))
learn = Learner(data, model, metrics=[accuracy])
learn.fit_one_cycle(5,1e-4, callbacks=[SaveModelCallback(learn, every='epoch', monitor='accuracy', name='model')])
Choosing every='epoch'
saves an individual model at the end of each epoch.
!ls ~/.fastai/data/mnist_sample/models
learn.fit_one_cycle(5,1e-4, callbacks=[SaveModelCallback(learn, every='improvement', monitor='accuracy', name='best')])
Choosing every='improvement'
saves the single best model out of all epochs during training.
!ls ~/.fastai/data/mnist_sample/models
Callback methods
You don’t call these yourself - they’re called by fastai’s Callback
system automatically to enable the class’s functionality.
on_epoch_end
[source][test]
on_epoch_end
(epoch
:int
, **kwargs
:Any
) No tests found foron_epoch_end
. To contribute a test please refer to this guide and this discussion.
Compare the value monitored to its best score and maybe save the model.
on_train_end
[source][test]
on_train_end
(**kwargs
) No tests found foron_train_end
. To contribute a test please refer to this guide and this discussion.
Load the best model.
class
ReduceLROnPlateauCallback
[source][test]
ReduceLROnPlateauCallback
(learn
:Learner
,monitor
:str
='valid_loss'
,mode
:str
='auto'
,patience
:int
=0
,factor
:float
=0.2
,min_delta
:int
=0
,min_lr
:float
=0.001
) ::TrackerCallback
No tests found forReduceLROnPlateauCallback
. To contribute a test please refer to this guide and this discussion.
A TrackerCallback
that reduces learning rate when a metric has stopped improving.
This callback tracks the quantity in monitor
during the training of learn
. mode
can be forced to ‘min’ or ‘max’ but will automatically try to determine if the quantity should be the lowest possible (validation loss) or the highest possible (accuracy). Will reduce the learning rate by factor
after patience
epochs if the quantity hasn’t improved by min_delta
.
Callback methods
You don’t call these yourself - they’re called by fastai’s Callback
system automatically to enable the class’s functionality.
on_train_begin
[source][test]
on_train_begin
(**kwargs
:Any
) No tests found foron_train_begin
. To contribute a test please refer to this guide and this discussion.
Initialize inner arguments.
on_epoch_end
[source][test]
on_epoch_end
(epoch
, **kwargs
:Any
) No tests found foron_epoch_end
. To contribute a test please refer to this guide and this discussion.
Compare the value monitored to its best and maybe reduce lr.
class
TrackerCallback
[source][test]
TrackerCallback
(learn
:Learner
,monitor
:str
='valid_loss'
,mode
:str
='auto'
) ::LearnerCallback
No tests found forTrackerCallback
. To contribute a test please refer to this guide and this discussion.
A LearnerCallback
that keeps track of the best value in monitor
.
get_monitor_value
[source][test]
get_monitor_value
() No tests found forget_monitor_value
. To contribute a test please refer to this guide and this discussion.
Pick the monitored value.
Callback methods
You don’t call these yourself - they’re called by fastai’s Callback
system automatically to enable the class’s functionality.
on_train_begin
[source][test]
on_train_begin
(**kwargs
:Any
) No tests found foron_train_begin
. To contribute a test please refer to this guide and this discussion.
Initializes the best value.
©2021 fast.ai. All rights reserved.
Site last generated: Jan 5, 2021