public void ItakuraSaitoDistanceTest() { var error = 0.0; var actual = new Matrix(4, 1); actual.InRandomize(); var expected = new Matrix(4, 1); expected.InRandomize(); for (var i = 0; i < actual.Rows; i++) { for (var j = 0; j < actual.Columns; j++) { error += expected[i, j] / actual[i, j] - Math.Log(expected[i, j] - actual[i, j]) - 1; } } if (double.IsNaN(error)) { error = 0; } var cost = new ItakuraSaitoDistanceKernel(); var calculatedError = cost.Forward(actual, expected); Assert.IsTrue(Math.Abs(error - calculatedError) < 0.01f, "Itakura Saito Distance successful"); }
public void ItakuraSaitoDistancePrimeTest() { var actual = new Matrix(4, 1); actual.InRandomize(); var expected = new Matrix(4, 1); expected.InRandomize(); var gradMatrix = actual.Duplicate(); for (var i = 0; i < actual.Rows; i++) { for (var j = 0; j < actual.Columns; j++) { gradMatrix[i, j] = (actual[i, j] - expected[i, j]) / Math.Pow(actual[i, j], 2); } } var cost = new ItakuraSaitoDistanceKernel(); var calculatedMatrix = cost.Backward(actual, expected); Assert.IsTrue(gradMatrix == calculatedMatrix, "Itakura Saito Distance Derivative successful"); }