class_docstr: Perform Grad CAM algorithm for a given input
  
  Paper: [Grad-CAM: Visual Explanations from Deep Networks
          via Gradient-based Localization](https://arxiv.org/abs/1610.02391)
docstr: Draw GradCAM outputs at each epoch end to Tensorboard.
  
  Args:
      epoch (int): Epoch index
      logs (dict): Additional information on epoch
code: def on_epoch_end(self, epoch, logs=None):
      """
      Draw GradCAM outputs at each epoch end to Tensorboard.
  
      Args:
          epoch (int): Epoch index
          logs (dict): Additional information on epoch
      """
      explainer = GradCAM()
      heatmap = explainer.explain(
          self.validation_data,
          self.model,
          class_index=self.class_index,
          layer_name=self.layer_name,
          use_guided_grads=self.use_guided_grads,
      )
  
      # Using the file writer, log the reshaped image.
      with self.file_writer.as_default():
          tf.summary.image("Grad CAM", np.array([heatmap]), step=epoch)
  
file_path: tf-explain/tf_explain/callbacks/grad_cam.py
imports: from datetime import datetime
  from pathlib import Path
  import numpy
  import tensorflow
  from tensorflow.keras.callbacks import Callback
  from tf_explain.core.grad_cam import GradCAM
label_desc: Use image node_id 2 for calling the GradCAMCallback obj's underlying member method code with example usage: obj.on_epoch_end(epoch, logs) without return types