code: def on_epoch_end(self, epoch, logs=None):
      super(ReloadBest, self).on_epoch_end(epoch, logs)
      time = datetime.utcnow() - self.train_begin
      train_loss = logs.get("loss")
      validate_loss = logs.get("val_loss")
      if validate_loss:
          if (
              self.validate_loss is None
              or self.validate_loss > validate_loss
          ):
              self.best_epoch = epoch + 1
              self.train_loss = train_loss
              self.validate_loss = validate_loss
      else:
          logger.error("No val_loss in logs, setting to NaN")
          validate_loss = float("nan")
      logger.info(
          "| %8i | %8s | %8.4f | %8.4f |"
          % (
              epoch,
              str(time).split(".", 2)[0],
              train_loss,
              validate_loss,
          )
      )
  
file_path: lore/lore/callbacks.py
imports: import lore
  from lore.env import require
  from lore.util import timer
  import logging
  from datetime import datetime
  import keras.callbacks
label_desc: Use image node_id 4 for calling the ReloadBest obj's underlying member method code with example usage: obj.on_epoch_end(epoch, logs) without return types