31
$\begingroup$

Can someone please post a straightforward example of Keras using a callback to save a model after every epoch? I can find examples of saving weights, but I want to be able to save a completely functioning model after every training epoch.

$\endgroup$

3 Answers 3

30
$\begingroup$

Setting 'save_weights_only' to False in the Keras callback 'ModelCheckpoint' will save the full model; this example taken from the link above will save a full model every epoch, regardless of performance:

keras.callbacks.ModelCheckpoint(filepath, monitor='val_loss', verbose=0, save_best_only=False, save_weights_only=False, mode='auto', period=1)

Some more examples are found here, including saving only improved models and loading the saved models.

$\endgroup$
19
$\begingroup$

Make sure to include epoch variable in your filepath. Otherwise your saved model will be replaced after every epoch.

filepath = "saved-model-{epoch:02d}-{val_acc:.2f}.hdf5"
checkpoint = ModelCheckpoint(filepath, monitor='val_acc', verbose=1, save_best_only=False, mode='max')

For more examples, check here.

$\endgroup$
1
  • 2
    $\begingroup$ Welcome to the site! And thanks, I appreciate that addition to the answer $\endgroup$ Feb 28, 2019 at 13:01
2
$\begingroup$

I wrote my own ModelCheckpoint class as I have to call a special save_pretrained method:

class ModelCheckpoint(Callback):

    def __init__(self, freq, directory):
        super().__init__()
        self.freq = freq
        self.directory = directory

    def on_epoch_begin(self, epoch, logs=None):
        if self.freq > 0 and epoch % self.freq == 0:
            self.model.save_pretrained(Path(directory, str(epoch)))

    def on_train_end(self, logs=None):
        self.model.save_pretrained(directory)

It always saves the model every freq epochs and at the end of the training.

$\endgroup$

Not the answer you're looking for? Browse other questions tagged or ask your own question.