'Called when an epoch is about to end
Arguments:
callback_data (HDF5 dataset): shared data between callbacks
model (Model): model object
epoch (int): index of epoch that is ending'

def on_epoch_end(self, callback_data, model, epoch):

    _eil = self._get_cached_epoch_loss(callback_data, model, epoch, 'loss')
    if _eil:
        if ((self.best_cost is None) or (_eil['cost'] < self.best_cost)):
            save_obj(model.serialize(keep_states=True), self.best_path)
            self.best_cost = _eil['cost']
