mseMatrix function

Tensor<Scalar> mseMatrix(
  1. Tensor<Matrix> predictions,
  2. Tensor<Matrix> targets
)

Implementation

Tensor<Scalar> mseMatrix(Tensor<Matrix> predictions, Tensor<Matrix> targets) {
  int numRows = predictions.value.length;
  int numCols = predictions.value[0].length;
  int N = numRows * numCols;
  double sumSquaredError = 0.0;
  for (int i = 0; i < numRows; i++) {
    for (int j = 0; j < numCols; j++) {
      double error = predictions.value[i][j] - targets.value[i][j];
      sumSquaredError += error * error;
    }
  }
  Tensor<Scalar> out = Tensor<Scalar>(sumSquaredError / N);
  out.creator = Node(
    [predictions, targets],
    () {
      for (int i = 0; i < numRows; i++) {
        for (int j = 0; j < numCols; j++) {
          predictions.grad[i][j] +=
              out.grad *
              2 *
              (predictions.value[i][j] - targets.value[i][j]) /
              N;
        }
      }
    },
    opName: 'mse_matrix', // <-- Renamed for clarity
    cost: 3 * N,
  );
  return out;
}