code: public SDVariable logLoss(String name, @NonNull SDVariable label, @NonNull SDVariable predictions,
                                SDVariable weights, @NonNull LossReduce lossReduce, double epsilon) {
          validateFloatingPoint("log loss", "predictions", predictions);
          validateNumerical("log loss", "labels", label);
          if (weights == null)
              weights = sd.scalar(null, predictions.dataType(), 1.0);
          SDVariable result = f().lossLog(label, predictions, weights, lossReduce, epsilon);
          result = updateVariableNameAndReference(result, name);
          result.markAsLoss();
          return result;
      }
docs: Log loss, i.e., binary cross entropy loss, usually used for binary multi-label classification. Implements:
  {@code -1/numExamples * sum_i (labels[i] * log(predictions[i] + epsilon) + (1-labels[i]) * log(1-predictions[i] + epsilon))}
  
  @param name        Name of the operation
  @param label       Label array
  @param predictions Predictions array
  @param weights     Weights array. May be null. If null, a weight of 1.0 is used
  @param lossReduce  Reduction type for the loss. See {@link LossReduce} for more details. Default: {@link LossReduce#MEAN_BY_NONZERO_WEIGHT_COUNT}
  @return Log loss variable