You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
With the keep_checkpoint option we can specify how many checkpoints should be kept. However, the checkpoints are just saved sequentially and never ordered. That means that if your best performing model is early on, it might get removed anyway.
As an alternative approach, I would suggest that if validation is done before each save step, that validation loss is also passed to the save method. self.checkpoint_queue could then contain tuples of (loss, chkpt_name) and after each append that queue gets sorted on loss. That way, only the worst performing models are removed.
Things to consider: ModelSaver should then know whether the metric is higher=better or lower=better, and a fallback needs to be in-place when no loss is passed.
The text was updated successfully, but these errors were encountered:
Hey Bram,
Yes, there is a pending PR #1859 and issue #1856 about this, but the first propositions did not convince me, and I did not take the time yet to have a deeper look.
I like the idea of having a queue that gets updated each time. Maybe some people would like to still keep the N last checkpoints (chronologically), thought, but that may be handled with a flag, like keep_checkpoints_order with choices=[metricA, metricB, "chronological"] for instance.
Feel free to open a PR for such an implementation.
In your proposal, you use metricA and metricB. In OpenNMT, can validation ever be done with more than one metric? From build_loss_compute it seems that there is only ever one metric during validation.
I would simply (optionally) pass the validation loss to the model saver here:
If no loss is passed (i.e. if no validation is done), the behaviour defaults to "chronological" and otherwise the validation metric is used. If that seems like something that interests you I can implement this next week.
With the
keep_checkpoint
option we can specify how many checkpoints should be kept. However, the checkpoints are just saved sequentially and never ordered. That means that if your best performing model is early on, it might get removed anyway.OpenNMT-py/onmt/models/model_saver.py
Lines 79 to 83 in 0734288
As an alternative approach, I would suggest that if validation is done before each save step, that validation loss is also passed to the
save
method.self.checkpoint_queue
could then contain tuples of(loss, chkpt_name)
and after each append that queue gets sorted onloss
. That way, only the worst performing models are removed.Things to consider:
ModelSaver
should then know whether the metric is higher=better or lower=better, and a fallback needs to be in-place when no loss is passed.The text was updated successfully, but these errors were encountered: