binaryCrossEntropy function

Tensor<Scalar> binaryCrossEntropy(
  1. Tensor<Scalar> prediction,
  2. Tensor<Scalar> target
)

Implementation

Tensor<Scalar> binaryCrossEntropy(Tensor<Scalar> prediction, Tensor<Scalar> target) {
  double predVal = prediction.data[0];
  double targetVal = target.data[0];

  double outValue = -(targetVal * log(predVal) + (1.0 - targetVal) * log(1.0 - predVal));
  Tensor<Scalar> out = Tensor<Scalar>(outValue);

  out.creator = Node(
    [prediction, target],
        () {
      prediction.grad[0] = prediction.grad[0] +
          out.grad[0] * ((predVal - targetVal) / (predVal * (1.0 - predVal)));
    },
    opName: 'binaryCrossEntropy',
    cost: 1,
  );
  return out;
}