code: def conv_2d(
      filters, kernel_shape, strides, padding, input_shape=None
  ):
      """
      Defines the right convolutional layer according to the
      version of Keras that is installed.
      :param filters: (required integer) the dimensionality of the output
                      space (i.e. the number output of filters in the
                      convolution)
      :param kernel_shape: (required tuple or list of 2 integers) specifies
                           the kernel shape of the convolution
      :param strides: (required tuple or list of 2 integers) specifies
                           the strides of the convolution along the width and
                           height.
      :param padding: (required string) can be either 'valid' (no padding around
                      input or feature map) or 'same' (pad to ensure that the
                      output feature map size is identical to the layer input)
      :param input_shape: (optional) give input shape if this is the first
                          layer of the model
      :return: the Keras layer
      """
      if input_shape is not None:
          return Conv2D(
              filters=filters,
              kernel_size=kernel_shape,
              strides=strides,
              padding=padding,
              input_shape=input_shape,
          )
      else:
          return Conv2D(
              filters=filters,
              kernel_size=kernel_shape,
              strides=strides,
              padding=padding,
          )
  
file_path: cleverhans/cleverhans_v3.1.0/cleverhans/utils_keras.py
imports: from distutils.version import LooseVersion
  import warnings
  import tensorflow
  from .model import Model, NoSuchLayerError
label_desc: Use image node_id 1 for calling a global function with example usage: conv_2d(filters, kernel_shape, strides, padding, input_shape) and returns: Conv2D, Conv2D