code: def GridSample(inputs, borderMode="repeat"):
      """
      Sample the images using the given coordinates, by bilinear interpolation.
      This was described in the paper:
      `Spatial Transformer Networks <http://arxiv.org/abs/1506.02025>`_.
  
      This is equivalent to `torch.nn.functional.grid_sample`,
      up to some non-trivial coordinate transformation.
  
      This implementation returns pixel value at pixel (1, 1) for a floating point coordinate (1.0, 1.0).
      Note that this may not be what you need.
  
      Args:
          inputs (list): [images, coords]. images has shape NHWC.
              coords has shape (N, H', W', 2), where each pair of the last dimension is a (y, x) real-value
              coordinate.
          borderMode: either "repeat" or "constant" (zero-filled)
  
      Returns:
          tf.Tensor: a tensor named ``output`` of shape (N, H', W', C).
      """
      image, mapping = inputs
      assert (
          image.get_shape().ndims == 4
          and mapping.get_shape().ndims == 4
      )
      input_shape = image.get_shape().as_list()[1:]
      assert (
          None not in input_shape
      ), "Images in GridSample layer must have fully-defined shape"
      assert borderMode in ["repeat", "constant"]
  
      orig_mapping = mapping
      mapping = tf.maximum(mapping, 0.0)
      lcoor = tf.floor(mapping)
      ucoor = lcoor + 1
  
      diff = mapping - lcoor
      neg_diff = 1.0 - diff  # bxh2xw2x2
  
      lcoory, lcoorx = tf.split(lcoor, 2, 3)
      ucoory, ucoorx = tf.split(ucoor, 2, 3)
  
      lyux = tf.concat([lcoory, ucoorx], 3)
      uylx = tf.concat([ucoory, lcoorx], 3)
  
      diffy, diffx = tf.split(diff, 2, 3)
      neg_diffy, neg_diffx = tf.split(neg_diff, 2, 3)
  
      ret = tf.add_n(
          [
              sample(image, lcoor) * neg_diffx * neg_diffy,
              sample(image, ucoor) * diffx * diffy,
              sample(image, lyux) * neg_diffy * diffx,
              sample(image, uylx) * diffy * neg_diffx,
          ],
          name="sampled",
      )
      if borderMode == "constant":
          max_coor = tf.constant(
              [input_shape[0] - 1, input_shape[1] - 1], dtype=tf.float32
          )
          mask = tf.greater_equal(orig_mapping, 0.0)
          mask2 = tf.less_equal(orig_mapping, max_coor)
          mask = tf.logical_and(mask, mask2)  # bxh2xw2x2
          mask = tf.reduce_all(mask, [3])  # bxh2xw2 boolean
          mask = tf.expand_dims(mask, 3)
          ret = ret * tf.cast(mask, tf.float32)
      return tf.identity(ret, name="output")
  
file_path: tensorpack/examples/SpatialTransformer/mnist-addition.py
imports: import argparse
  import numpy
  import os
  import cv2
  from tensorpack import tfv1
  from tensorpack import *
  from tensorpack.dataflow import dataset
  from tensorpack.tfutils import gradproc, optimizer, summary
label_desc: Use image node_id 2 for calling a global function with example usage: GridSample(inputs, borderMode) and returns: tf