public void LogitTest() { var actual = new Matrix(4, 1); var expected = new Matrix(4, 1); actual.InRandomize(); expected.InRandomize(); var autoErr = new Logit().Evaluate(actual, expected); var error = 0.0; for (var i = 0; i < actual.Rows; i++) { for (var j = 0; j < actual.Columns; j++) { error += Math.Log(1.0 + Math.Exp(actual[i, j] * -expected[i, j])); } } error /= actual.Rows * actual.Columns; Assert.IsTrue(Math.Abs(error - autoErr) < 0.01, new Logit().Type().ToString() + " Forward!"); var autoDErr = new Logit().Backward(actual, expected); var dErr = new Matrix(actual.Rows, actual.Columns); for (var i = 0; i < actual.Rows; i++) { for (var j = 0; j < actual.Columns; j++) { dErr[i, j] = -1.0 / (1.0 + Math.Exp(actual[i, j] * expected[i, j])); } } Assert.IsTrue(Math.Abs(dErr.FrobeniusNorm() - autoDErr.FrobeniusNorm()) < 0.01, new Logit().Type().ToString() + " Backward!"); }
public void LogitPrimeTest() { var a = new Matrix(2, 2); a.InRandomize(); var b = a.Duplicate(); a = new Logit().Backward(a); b.InMap((x) => - 1 / Math.Pow(x, 2) - 1 / Math.Pow(1 - x, 2)); Assert.IsTrue(Math.Abs(a.FrobeniusNorm() - b.FrobeniusNorm()) < 0.1, new Logit().Type().ToString() + " Derivative."); }
public void LogitTest() { var a = new Matrix(2, 2); a.InRandomize(); var b = a.Duplicate(); a = new Logit().Forward(a); b.InMap((x) => Math.Log(x / (1 - x))); Assert.IsTrue(Math.Abs(a.FrobeniusNorm() - b.FrobeniusNorm()) < 0.1, new Logit().Type().ToString() + " Activation."); }