docstr: Called at the end of an epoch.
  Subclasses should override for any actions to run. This function should only
  be called during TRAIN mode.
  :param epoch:  Integer, index of epoch.
docstr_tok: ["Called","at","the","end","of","an","epoch",".","Subclasses","should","override","for","any","actions","to","run",".","This","function","should","only","be","called","during","TRAIN","mode",".",":","param","epoch",":","Integer",",","index","of","epoch","."]
code: def after_train_epoch(self, runner):
      """
      Called at the end of an epoch.
      Subclasses should override for any actions to run. This function should only
      be called during TRAIN mode.
      :param epoch:  Integer, index of epoch.
      """
      if not self.by_epoch:
          return
      # if user do not specify the interval, save checkpoint after every epoch
      if self.interval < 0:
          self.interval = 1
      if self.every_n_epoch(runner, self.interval):
          stats = {"epoch": runner.epochs}
          last_ckpt_path = self._format_checkpoint_name(
              dirname=self.dirname, filename=self.filename, stats=stats
          )
          runner.save_checkpoint(last_ckpt_path, self.save_weights_only)
  
file_path: BigDL/python/orca/src/bigdl/orca/learn/pytorch/callbacks/model_checkpoint.py
imports: from bigdl.orca.learn.pytorch.callbacks import Callback
  import os
  import re
  import warnings
  from bigdl.dllib.utils.log4Error import invalidInputError
label_desc: Use image node_id 2 for calling the ModelCheckpoint obj's underlying member method code with example usage: obj.after_train_epoch(runner) without return types