code: def check_forward(self, x_data, t_data, use_cudnn="always"):
      x_val = chainer.Variable(x_data)
      t_val = chainer.Variable(t_data)
      with chainer.using_config("use_cudnn", use_cudnn):
          loss = functions.sigmoid_cross_entropy(
              x_val, t_val, self.normalize
          )
      self.assertEqual(loss.data.shape, ())
      self.assertEqual(loss.data.dtype, self.dtype)
      loss_value = float(cuda.to_cpu(loss.data))
  
      # Compute expected value
      loss_expect = 0
      non_ignore_count = 0
      for i in six.moves.range(self.x.shape[0]):
          for j in six.moves.range(self.x.shape[1]):
              xd, td = self.x[i, j], self.t[i, j]
              if td == -1:
                  continue
              loss_expect -= xd * (td - (xd >= 0)) - math.log(
                  1 + math.exp(-numpy.abs(xd))
              )
              non_ignore_count += 1
      if non_ignore_count == 0:
          loss_expect = 0
      elif self.normalize:
          loss_expect /= non_ignore_count
      else:
          loss_expect /= self.t.shape[0]
      self.assertAlmostEqual(
          loss_expect, loss_value, places=self.places
      )
  
imports: import math
  import unittest
  import numpy
  import six
  import chainer
  from chainer.backends import cuda
  from chainer import functions
  from chainer import gradient_check
  from chainer import testing
  from chainer.testing import attr
  from chainer import utils
label_desc: Use image node_id 2 for calling the TestSigmoidCrossEntropy obj's underlying member method code with example usage: obj.check_forward(x_data, t_data, use_cudnn) without return types