function sigmoidCrossEntropy_(multiClassLabels, logits, weights, labelSmoothing = 0, reduction = (0, _lossOpsUtils.Reduction).SUM_BY_NONZERO_WEIGHTS) {
    let $multiClassLabels = (0, _tensorUtilEnv.convertToTensor)(multiClassLabels, "multiClassLabels", "sigmoidCrossEntropy");
    const $logits = (0, _tensorUtilEnv.convertToTensor)(logits, "logits", "sigmoidCrossEntropy");
    let $weights = null;
    if (weights != null) $weights = (0, _tensorUtilEnv.convertToTensor)(weights, "weights", "sigmoidCrossEntropy");
    (0, _util.assertShapesMatch)($multiClassLabels.shape, $logits.shape, "Error in sigmoidCrossEntropy: ");
    if (labelSmoothing > 0) {
        const labelSmoothingScalar = (0, _scalar.scalar)(labelSmoothing);
        const one = (0, _scalar.scalar)(1);
        const half = (0, _scalar.scalar)(0.5);
        $multiClassLabels = (0, _add.add)((0, _mul.mul)($multiClassLabels, (0, _sub.sub)(one, labelSmoothingScalar)), (0, _mul.mul)(half, labelSmoothingScalar));
    }
    const losses = sigmoidCrossEntropyWithLogits_($multiClassLabels, $logits);
    return (0, _computeWeightedLoss.computeWeightedLoss)(losses, $weights, reduction);
}
Computes the sigmoid cross entropy loss between two tensors.

If labelSmoothing is nonzero, smooth the labels towards 1/2:

  newMulticlassLabels = multiclassLabels * (1 - labelSmoothing)
                        + 0.5 * labelSmoothing

@param multiClassLabels The ground truth output tensor of shape
[batch_size, num_classes], same dimensions as 'predictions'.
@param logits The predicted outputs.
@param weights Tensor whose rank is either 0, or the same rank as
   `labels`, and must be broadcastable to `labels` (i.e., all dimensions
   must be either `1`, or the same as the corresponding `losses`
   dimension).
@param labelSmoothing If greater than 0, then smooth the labels.
@param reduction Type of reduction to apply to loss. Should be of type
   `Reduction`

@doc { heading: 'Training', subheading: 'Losses', namespace: 'losses' }