code: def _forward_cudnn(self, x, W, b):
      c = W.shape[1] * self.groups
      n, in_c = x.shape[:2]  # x: n, C_I, d_1, d_2, ..., d_N
  
      # Make empty array for output.
      y_shape = (n, c) + self.outs  # (n, c_O, out_1, out_2, ..., out_N)
      y = cuda.cupy.empty(y_shape, dtype=x.dtype)
  
      pad = self.pad
      stride = self.stride
      dilate = self.dilate
      groups = self.groups
      deterministic = configuration.config.cudnn_deterministic
      auto_tune = configuration.config.autotune
      tensor_core = configuration.config.use_cudnn_tensor_core
  
      cuda.cudnn.convolution_backward_data(
          W,
          x,
          b,
          y,
          pad,
          stride,
          dilate,
          groups,
          deterministic=deterministic,
          auto_tune=auto_tune,
          tensor_core=tensor_core,
      )
  
      return (y,)
  
imports: import numpy
  from six import moves
  import chainer
  from chainer import backend
  from chainer.backends import cuda
  from chainer import configuration
  from chainer import function_node
  from chainer.functions.connection import convolution_2d
  from chainer.functions.connection import convolution_nd
  from chainer import utils
  from chainer.utils import conv
  from chainer.utils import conv_nd
  from chainer.utils import type_check
  import chainerx
label_desc: Use image node_id 7 for calling the DeconvolutionND obj's underlying member method code with example usage: obj._forward_cudnn(x, W, b) and returns: y