[mlpack-git] master: Add tests for MaxIterationTermination. (651e224)

gitdub at big.cc.gt.atl.ga.us gitdub at big.cc.gt.atl.ga.us
Tue Jul 7 12:04:52 EDT 2015


Repository : https://github.com/mlpack/mlpack

On branch  : master
Link       : https://github.com/mlpack/mlpack/compare/9e806819495ee24c60d7b63b1fee1ab74c52f6cc...da092bd34072dae51aeca3df868430f34c4cccb5

>---------------------------------------------------------------

commit 651e22447c406242349cfcd5c7865156a529be2d
Author: Ryan Curtin <ryan at ratml.org>
Date:   Tue Jul 7 16:03:55 2015 +0000

    Add tests for MaxIterationTermination.


>---------------------------------------------------------------

651e22447c406242349cfcd5c7865156a529be2d
 src/mlpack/tests/CMakeLists.txt              |  1 +
 src/mlpack/tests/termination_policy_test.cpp | 61 ++++++++++++++++++++++++++++
 2 files changed, 62 insertions(+)

diff --git a/src/mlpack/tests/CMakeLists.txt b/src/mlpack/tests/CMakeLists.txt
index cb9103d..033f6da 100644
--- a/src/mlpack/tests/CMakeLists.txt
+++ b/src/mlpack/tests/CMakeLists.txt
@@ -53,6 +53,7 @@ add_executable(mlpack_test
   sort_policy_test.cpp
   sparse_autoencoder_test.cpp
   sparse_coding_test.cpp
+  termination_policy_test.cpp
   to_string_test.cpp
   tree_test.cpp
   tree_traits_test.cpp
diff --git a/src/mlpack/tests/termination_policy_test.cpp b/src/mlpack/tests/termination_policy_test.cpp
new file mode 100644
index 0000000..da51afb
--- /dev/null
+++ b/src/mlpack/tests/termination_policy_test.cpp
@@ -0,0 +1,61 @@
+/**
+ * @file termination_policy_test.cpp
+ * @author Ryan Curtin
+ *
+ * Tests for AMF termination policies.
+ */
+#include <mlpack/core.hpp>
+#include <mlpack/methods/amf/amf.hpp>
+#include <mlpack/methods/amf/termination_policies/max_iteration_termination.hpp>
+#include <mlpack/methods/amf/update_rules/nmf_mult_div.hpp>
+
+#include <boost/test/unit_test.hpp>
+#include "old_boost_test_definitions.hpp"
+
+BOOST_AUTO_TEST_SUITE(TerminationPolicyTest);
+
+using namespace std;
+using namespace arma;
+using namespace mlpack;
+using namespace mlpack::amf;
+
+/**
+ * Simple test -- make sure termination happens after the right number of
+ * iterations.
+ */
+BOOST_AUTO_TEST_CASE(MaxIterationTerminationTest)
+{
+  MaxIterationTermination mit(500);
+
+  arma::mat x; // Just an argument to pass.
+  for (size_t i = 0; i < 499; ++i)
+    BOOST_REQUIRE_EQUAL(mit.IsConverged(x, x), false);
+
+  // Should keep returning true once maximum iterations are reached.
+  BOOST_REQUIRE_EQUAL(mit.IsConverged(x, x), true);
+  BOOST_REQUIRE_EQUAL(mit.Iteration(), 500);
+  BOOST_REQUIRE_EQUAL(mit.IsConverged(x, x), true);
+  BOOST_REQUIRE_EQUAL(mit.IsConverged(x, x), true);
+}
+
+/**
+ * Make sure that AMF properly terminates.
+ */
+BOOST_AUTO_TEST_CASE(AMFMaxIterationTerminationTest)
+{
+  mat w = randu<mat>(20, 12);
+  mat h = randu<mat>(12, 20);
+  mat v = w * h;
+  size_t r = 12;
+
+  // Custom tighter tolerance.
+  MaxIterationTermination mit(10); // Only 10 iterations.
+  AMF<MaxIterationTermination,
+      RandomInitialization,
+      NMFMultiplicativeDivergenceUpdate> nmf(mit);
+  nmf.Apply(v, r, w, h);
+
+  BOOST_REQUIRE_EQUAL(nmf.TerminationPolicy().Iteration(), 10);
+}
+
+BOOST_AUTO_TEST_SUITE_END();



More information about the mlpack-git mailing list