parameters: (logits, targets, name=None)
docstring: Computes sigmoid cross entropy given `logits`.
  
    Measures the probability error in discrete classification tasks in which each
    class is independent and not mutually exclusive.  For instance, one could
    perform multilabel classification where a picture can contain both an elephant
    and a dog at the same time.
  
    For brevity, let `x = logits`, `z = targets`.  The logistic loss is
  
          z * -log(sigmoid(x)) + (1 - z) * -log(1 - sigmoid(x))
        = z * -log(1 / (1 + exp(-x))) + (1 - z) * -log(exp(-x) / (1 + exp(-x)))
        = z * log(1 + exp(-x)) + (1 - z) * (-log(exp(-x)) + log(1 + exp(-x)))
        = z * log(1 + exp(-x)) + (1 - z) * (x + log(1 + exp(-x))
        = (1 - z) * x + log(1 + exp(-x))
        = x - x * z + log(1 + exp(-x))
  
    For x < 0, to avoid overflow in exp(-x), we reformulate the above
  
          x - x * z + log(1 + exp(-x))
        = log(exp(x)) - x * z + log(1 + exp(-x))
        = - x * z + log(1 + exp(x))
  
    Hence, to ensure stability and avoid overflow, the implementation uses this
    equivalent formulation
  
        max(x, 0) - x * z + log(1 + exp(-abs(x)))
  
    `logits` and `targets` must have the same type and shape.
  
    Args:
      logits: A `Tensor` of type `float32` or `float64`.
      targets: A `Tensor` of the same type and shape as `logits`.
      name: A name for the operation (optional).
  
    Returns:
      A `Tensor` of the same shape as `logits` with the componentwise
      logistic losses.
  
    Raises:
      ValueError: If `logits` and `targets` do not have the same shape.
docstring_summary: Computes sigmoid cross entropy given `logits`.
docstring_tokens: Computes sigmoid cross entropy given logits .
function: def sigmoid_cross_entropy_with_logits(logits, targets, name=None):
    """Computes sigmoid cross entropy given `logits`.
  
    Measures the probability error in discrete classification tasks in which each
    class is independent and not mutually exclusive.  For instance, one could
    perform multilabel classification where a picture can contain both an elephant
    and a dog at the same time.
  
    For brevity, let `x = logits`, `z = targets`.  The logistic loss is
  
          z * -log(sigmoid(x)) + (1 - z) * -log(1 - sigmoid(x))
        = z * -log(1 / (1 + exp(-x))) + (1 - z) * -log(exp(-x) / (1 + exp(-x)))
        = z * log(1 + exp(-x)) + (1 - z) * (-log(exp(-x)) + log(1 + exp(-x)))
        = z * log(1 + exp(-x)) + (1 - z) * (x + log(1 + exp(-x))
        = (1 - z) * x + log(1 + exp(-x))
        = x - x * z + log(1 + exp(-x))
  
    For x < 0, to avoid overflow in exp(-x), we reformulate the above
  
          x - x * z + log(1 + exp(-x))
        = log(exp(x)) - x * z + log(1 + exp(-x))
        = - x * z + log(1 + exp(x))
  
    Hence, to ensure stability and avoid overflow, the implementation uses this
    equivalent formulation
  
        max(x, 0) - x * z + log(1 + exp(-abs(x)))
  
    `logits` and `targets` must have the same type and shape.
  
    Args:
      logits: A `Tensor` of type `float32` or `float64`.
      targets: A `Tensor` of the same type and shape as `logits`.
      name: A name for the operation (optional).
  
    Returns:
      A `Tensor` of the same shape as `logits` with the componentwise
      logistic losses.
  
    Raises:
      ValueError: If `logits` and `targets` do not have the same shape.
    """
    with ops.op_scope([logits, targets], name, "logistic_loss") as name:
      logits = ops.convert_to_tensor(logits, name="logits")
      targets = ops.convert_to_tensor(targets, name="targets")
      try:
        targets.get_shape().merge_with(logits.get_shape())
      except ValueError:
        raise ValueError("logits and targets must have the same shape (%s vs %s)"
                         % (logits.get_shape(), targets.get_shape()))
  
      # The logistic loss formula from above is
      #   x - x * z + log(1 + exp(-x))
      # For x < 0, a more numerically stable formula is
      #   -x * z + log(1 + exp(x))
      # Note that these two expressions can be combined into the following:
      #   max(x, 0) - x * z + log(1 + exp(-abs(x)))
      # To allow computing gradients at zero, we define custom versions of max and
      # abs functions.
      zeros = array_ops.zeros_like(logits, dtype=logits.dtype)
      cond = (logits >= zeros)
      relu_logits = math_ops.select(cond, logits, zeros)
      neg_abs_logits = math_ops.select(cond, -logits, logits)
      return math_ops.add(relu_logits - logits * targets,
                          math_ops.log(1 + math_ops.exp(neg_abs_logits)),
                          name=name)
function_tokens: def sigmoid_cross_entropy_with_logits ( logits , targets , name = None ) : with ops . op_scope ( [ logits , targets ] , name , "logistic_loss" ) as name : logits = ops . convert_to_tensor ( logits , name = "logits" ) targets = ops . convert_to_tensor ( targets , name = "targets" ) try : targets . get_shape ( ) . merge_with ( logits . get_shape ( ) ) except ValueError : raise ValueError ( "logits and targets must have the same shape (%s vs %s)" % ( logits . get_shape ( ) , targets . get_shape ( ) ) ) # The logistic loss formula from above is #   x - x * z + log(1 + exp(-x)) # For x < 0, a more numerically stable formula is #   -x * z + log(1 + exp(x)) # Note that these two expressions can be combined into the following: #   max(x, 0) - x * z + log(1 + exp(-abs(x))) # To allow computing gradients at zero, we define custom versions of max and # abs functions. zeros = array_ops . zeros_like ( logits , dtype = logits . dtype ) cond = ( logits >= zeros ) relu_logits = math_ops . select ( cond , logits , zeros ) neg_abs_logits = math_ops . select ( cond , - logits , logits ) return math_ops . add ( relu_logits - logits * targets , math_ops . log ( 1 + math_ops . exp ( neg_abs_logits ) ) , name = name )