code: def on_epoch_end(self, data, logs={}):
      # Hacky, revise later.
      epoch = data[0]
      reference_data = data[1][0 : self.epoch_prediction_batch_size]
  
      if self.epoch_prediction_object is None:
          prediction = self.deepneuro_model.predict(
              sample_latent=self.sample_latent
          )
      else:
          prediction = self.epoch_prediction_object.process_case(
              self.predict_data[self.deepneuro_model.input_data],
              model=self.deepneuro_model,
          )
  
      output_filepaths, output_images = check_data(
          {"prediction": prediction, "real_data": reference_data},
          output_filepath=os.path.join(
              self.depth_dir, "epoch_{}.png".format(epoch)
          ),
          show_output=False,
          batch_size=self.epoch_prediction_batch_size,
      )
  
      for key, images in output_images.items():
          self.predictions[-1][key] += [images.astype("uint8")]
  
      return
  
imports: import math
  import numpy
  import tensorflow
  import os
  import imageio
  import keras
  import scipy
  from tqdm import tqdm
  from collections import defaultdict
  from deepneuro.utilities.util import add_parameter
  from deepneuro.models.blocks import generator, discriminator
  from deepneuro.models.cost_functions import wasserstein_loss
  from deepneuro.models.gan import GAN
  from deepneuro.models.ops import upscale2d, downscale2d
  from deepneuro.utilities.visualize import check_data
label_desc: Use image node_id 3 for calling the PGGANPredict obj's underlying member method code with example usage: obj.on_epoch_end(data, logs) without return types