class_docstr: to save the template model, not the multi-GPU model
      
class_docstr_tok: ["to","save","the","template","model",",","not","the","multi-GPU","model"]
code: def on_epoch_end(self, epoch, logs=None):
      logs = logs or {}
      self.epochs_since_last_save += 1
      if self.epochs_since_last_save >= self.period:
          self.epochs_since_last_save = 0
          filepath = self.filepath.format(epoch=epoch + 1, **logs)
          if self.save_best_only:
              current = logs.get(self.monitor)
              if current is None:
                  warnings.warn(
                      "Can save best model only with %s available, "
                      "skipping." % (self.monitor),
                      RuntimeWarning,
                  )
              else:
                  if self.monitor_op(current, self.best):
                      if self.verbose > 0:
                          print(
                              "\nEpoch %05d: %s improved from %0.5f to %0.5f,"
                              " saving model to %s"
                              % (
                                  epoch + 1,
                                  self.monitor,
                                  self.best,
                                  current,
                                  filepath,
                              )
                          )
                      self.best = current
                      if self.save_weights_only:
                          self.model_to_save.save_weights(
                              filepath, overwrite=True
                          )
                      else:
                          self.model_to_save.save(
                              filepath, overwrite=True
                          )
                  else:
                      if self.verbose > 0:
                          print(
                              "\nEpoch %05d: %s did not improve from %0.5f"
                              % (epoch + 1, self.monitor, self.best)
                          )
          else:
              if self.verbose > 0:
                  print(
                      "\nEpoch %05d: saving model to %s"
                      % (epoch + 1, filepath)
                  )
              if self.save_weights_only:
                  self.model_to_save.save_weights(
                      filepath, overwrite=True
                  )
              else:
                  self.model_to_save.save(filepath, overwrite=True)
  
      super(CustomModelCheckpoint, self).on_batch_end(epoch, logs)
  
file_path: ImageAI/imageai_tf_deprecated/Detection/Custom/callbacks.py
imports: from tensorflow.keras.callbacks import TensorBoard, ModelCheckpoint
  import tensorflow
  import numpy
  import warnings
label_desc: Use image node_id 2 for calling the CustomModelCheckpoint obj's underlying member method code with example usage: obj.on_epoch_end(epoch, logs) without return types