class_docstr: Perform SmoothGrad algorithm for a given input
  
  Paper: [SmoothGrad: removing noise by adding noise](https://arxiv.org/abs/1706.03825)
docstr: Generate num_samples noisy images with std noise for each image.
  
  Args:
      images (numpy.ndarray): 4D-Tensor with shape (batch_size, H, W, 3)
      num_samples (int): Number of noisy samples to generate for each input image
      noise (float): Standard deviation for noise normal distribution
  
  Returns:
      np.ndarray: 4D-Tensor of noisy images with shape (batch_size*num_samples, H, W, 3)
code: def generate_noisy_images(images, num_samples, noise):
      """
      Generate num_samples noisy images with std noise for each image.
  
      Args:
          images (numpy.ndarray): 4D-Tensor with shape (batch_size, H, W, 3)
          num_samples (int): Number of noisy samples to generate for each input image
          noise (float): Standard deviation for noise normal distribution
  
      Returns:
          np.ndarray: 4D-Tensor of noisy images with shape (batch_size*num_samples, H, W, 3)
      """
      repeated_images = np.repeat(images, num_samples, axis=0)
      noise = np.random.normal(0, noise, repeated_images.shape).astype(
          np.float32
      )
  
      return repeated_images + noise
  
file_path: tf-explain/tf_explain/core/smoothgrad.py
imports: import numpy
  import tensorflow
  from tf_explain.utils.display import grid_display
  from tf_explain.utils.image import transform_to_normalized_grayscale
  from tf_explain.utils.saver import save_grayscale
label_desc: Use image node_id 2 for calling the SmoothGrad obj's underlying member method code with example usage: obj.generate_noisy_images(images, num_samples, noise) and returns: unknown