code: def testUnknownBatchSizeNCHW(self):
      if self.primary_device == "CPU":
          self.skipTest("NCHW not supported on CPU")
  
      x = tf.TensorSpec([None, 3, 5, 5], dtype=tf.float32)
      c = conv.ConvND(
          num_spatial_dims=2,
          output_channels=2,
          kernel_shape=3,
          data_format="NCHW",
      )
      defun_conv = tf.function(c).get_concrete_function(x)
  
      out1 = defun_conv(tf.ones([3, 3, 5, 5]))
      self.assertEqual(out1.shape, [3, 2, 5, 5])
  
      out2 = defun_conv(tf.ones([5, 3, 5, 5]))
      self.assertEqual(out2.shape, [5, 2, 5, 5])
  
imports: from absl.testing import parameterized
  import numpy
  from sonnet.src import conv
  from sonnet.src import initializers
  from sonnet.src import test_utils
  import tensorflow
label_desc: Use image node_id 8 for calling the ConvTest obj's underlying member method code with example usage: obj.testUnknownBatchSizeNCHW() without return types