code: def forward_cpu(self, inputs_and_grad_outputs):
      x, t, gloss = inputs_and_grad_outputs
      if x.size == 0:
          return numpy.zeros(x.shape, dtype=x.dtype), None
      if self.y is not None:
          y = self.y.copy()
      else:
          y = log_softmax._log_softmax(x)
          numpy.exp(y, out=y)
      t_valid = t != self.ignore_label
      t = t * t_valid
      if self.soft_target:
          gx = y - t
      elif y.ndim == 2:
          gx = y
          gx[numpy.arange(len(t)), t] -= 1
          if self.class_weight is not None:
              shape = [
                  1 if d != 1 else -1 for d in six.moves.range(x.ndim)
              ]
              c = _broadcast_to(
                  self.class_weight.reshape(shape), x.shape
              )
              c = c[numpy.arange(len(t)), t]
              gx *= _broadcast_to(numpy.expand_dims(c, 1), gx.shape)
          gx *= t_valid.reshape((len(t), 1))
      else:
          # in the case where y.ndim is higher than 2,
          # we think that a current implementation is inefficient
          # because it yields two provisional arrays for indexing.
          n_unit = t.size // len(t)
          gx = y.reshape(y.shape[0], y.shape[1], -1)
          fst_index = numpy.arange(t.size) // n_unit
          trd_index = numpy.arange(t.size) % n_unit
          gx[fst_index, t.ravel(), trd_index] -= 1
          if self.class_weight is not None:
              shape = [
                  1 if d != 1 else -1 for d in six.moves.range(x.ndim)
              ]
              c = _broadcast_to(
                  self.class_weight.reshape(shape), x.shape
              )
              c = c.reshape(gx.shape)
              c = c[fst_index, t.ravel(), trd_index]
              c = c.reshape(y.shape[0], 1, -1)
              gx *= _broadcast_to(c, gx.shape)
          gx *= t_valid.reshape((len(t), 1, -1))
          gx = gx.reshape(y.shape)
      if self.coeff is not None:
          gx *= gloss * self.coeff
      else:
          gx *= gloss[:, None]
      return (gx,)
  
imports: import numpy
  import six
  import chainer
  from chainer import backend
  from chainer.backends import cuda
  from chainer import function_node
  from chainer.functions.activation import log_softmax
  from chainer.utils import type_check
  from chainer import variable
  import chainerx
label_desc: Use image node_id 2 for calling the _SoftmaxCrossEntropyGrad_NoDoubleBackprop obj's underlying member method code with example usage: obj.forward_cpu(inputs_and_grad_outputs) and returns: gx, numpy,  None