code: def out_generated_image(gen, dis, rows, cols, seed, dst):
      @chainer.training.make_extension()
      def make_image(trainer):
          np.random.seed(seed)
          n_images = rows * cols
          xp = gen.xp
          z = Variable(xp.asarray(gen.make_hidden(n_images)))
          with chainer.using_config("train", False):
              x = gen(z)
          x = chainer.cuda.to_cpu(x.array)
          np.random.seed()
  
          x = np.asarray(np.clip(x * 255, 0.0, 255.0), dtype=np.uint8)
          _, _, H, W = x.shape
          x = x.reshape((rows, cols, 3, H, W))
          x = x.transpose(0, 3, 1, 4, 2)
          x = x.reshape((rows * H, cols * W, 3))
  
          preview_dir = "{}/preview".format(dst)
          preview_path = preview_dir + "/image{:0>8}.png".format(
              trainer.updater.iteration
          )
          if not os.path.exists(preview_dir):
              os.makedirs(preview_dir)
          Image.fromarray(x).save(preview_path)
  
      return make_image
  
imports: import os
  import numpy
  from PIL import Image
  import chainer
  import chainer.cuda
  from chainer import Variable
label_desc: Use image node_id 1 for calling a global function with example usage: out_generated_image(gen, dis, rows, cols, seed, dst) and returns: make_image