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.
  :param logs: Dict, metric results for this training epoch, and for the validation epoch if
      validation is performed. Validation result keys are prefixed with val_. For training
      epoch, the values of the Model's metrics are returned.
      Example : {'loss': 0.2, 'accuracy': 0.7}
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",".",":","param","logs",":","Dict",",","metric","results","for","this","training","epoch",",","and","for","the","validation","epoch","if","validation","is","performed",".","Validation","result","keys","are","prefixed","with","val_",".","For","training","epoch",",","the","values","of","the","Model","'s","metrics","are","returned",".","Example",":","{","'loss","'",":","0.2",",","'accuracy","'",":","0.7","}"]
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.
      :param logs: Dict, metric results for this training epoch, and for the validation epoch if
          validation is performed. Validation result keys are prefixed with val_. For training
          epoch, the values of the Model's metrics are returned.
          Example : {'loss': 0.2, 'accuracy': 0.7}
      """
      if self.freq == "epoch" and self._is_rank_zero(runner):
          writer = SummaryWriter(log_dir=self.tmp_dir, **self.kwargs)
          for name, value in runner.epoch_stats.items():
              if name not in self.unlog_items:
                  writer.add_scalar(name, value, runner.epochs)
          writer.close()
  
file_path: BigDL/python/orca/src/bigdl/orca/learn/pytorch/callbacks/tensorboard.py
imports: import os
  import shutil
  import tempfile
  from torch.utils.tensorboard import SummaryWriter
  from bigdl.orca.data.file import put_local_dir_tree_to_remote
  from bigdl.orca.learn.pytorch.callbacks import Callback
  from bigdl.dllib.utils.log4Error import invalidInputError
label_desc: Use image node_id 3 for calling the TensorBoardCallback obj's underlying member method code with example usage: obj.after_train_epoch(runner) without return types