public void KullbackLeiblerDivergenceTest() { 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] * Math.Log(expected[i, j] / actual[i, j]); } } var cost = new KullbackLeiblerDivergenceKernel(); var calculatedError = cost.Forward(actual, expected); Assert.IsTrue(Math.Abs(error - calculatedError) < 0.01f, "Kullback Leibler Divergence Cost successful"); }
public void KullbackLeiblerDivergencePrimeTest() { 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] = -(expected[i, j] / actual[i, j]); } } var cost = new KullbackLeiblerDivergenceKernel(); var calculatedMatrix = cost.Backward(actual, expected); Assert.IsTrue(gradMatrix == calculatedMatrix, "Kullback Leibler Divergence Derivative successful"); }