code: def save_image(self, iteration):
      demo_row = 5
      demo_col = 5
      if not hasattr(self, "demo_noise"):
          self.demo_noise = tensor.Tensor(
              (demo_col * demo_row, self.noise_size),
              dev,
              tensor.float32,
          )
      self.demo_noise.uniform(-1, 1)
      gen_imgs = self.model.forward_gen(self.demo_noise)
      gen_imgs = tensor.to_numpy(gen_imgs)
      show_imgs = np.reshape(
          gen_imgs,
          (gen_imgs.shape[0], self.rows, self.cols, self.channels),
      )
      fig, axs = plt.subplots(demo_row, demo_col)
      cnt = 0
      for r in range(demo_row):
          for c in range(demo_col):
              axs[r, c].imshow(show_imgs[cnt, :, :, 0], cmap="gray")
              axs[r, c].axis("off")
              cnt += 1
      fig.savefig("{}{}.png".format(self.file_dir, iteration))
      plt.close()
  
file_path: singa/examples/gan/lsgan.py
imports: from singa import device
  from singa import opt
  from singa import tensor
  import argparse
  import matplotlib.pyplot
  import numpy
  import os
  from model import lsgan_mlp
  from utils import load_data
  from utils import print_log
label_desc: Use image node_id 3 for calling the LSGAN obj's underlying member method code with example usage: obj.save_image(iteration) without return types