From 2622e82565cbadad512bd1ac44387e986d2f0aa5 Mon Sep 17 00:00:00 2001 From: "cs15mtech11007@iith.ac.in" Date: Tue, 21 Feb 2017 19:07:43 +0530 Subject: [PATCH 01/24] Gaussian_Init --- .../methods/ann/init_rules/CMakeLists.txt | 1 + .../methods/ann/init_rules/gaussian_init.hpp | 103 ++++++++++++++++++ src/mlpack/tests/init_rules_test.cpp | 16 +++ 3 files changed, 120 insertions(+) create mode 100644 src/mlpack/methods/ann/init_rules/gaussian_init.hpp diff --git a/src/mlpack/methods/ann/init_rules/CMakeLists.txt b/src/mlpack/methods/ann/init_rules/CMakeLists.txt index 981ceaa23d..78dffb67d1 100644 --- a/src/mlpack/methods/ann/init_rules/CMakeLists.txt +++ b/src/mlpack/methods/ann/init_rules/CMakeLists.txt @@ -6,6 +6,7 @@ set(SOURCES kathirvalavakumar_subavathi_init.hpp nguyen_widrow_init.hpp zero_init.hpp + gaussian_init.hpp ) # Add directory name to sources. diff --git a/src/mlpack/methods/ann/init_rules/gaussian_init.hpp b/src/mlpack/methods/ann/init_rules/gaussian_init.hpp new file mode 100644 index 0000000000..788805a5a0 --- /dev/null +++ b/src/mlpack/methods/ann/init_rules/gaussian_init.hpp @@ -0,0 +1,103 @@ +/** + * @file gaussian_init.hpp + * @author Kris Singh + * + * Intialization rule for the neural networks. This simple initialization is + * performed by assigning a gaussian matrix with a given mean and variance + * to the weight matrix. + * + * mlpack is free software; you may redistribute it and/or modify it under the + * terms of the 3-clause BSD license. You should have received a copy of the + * 3-clause BSD license along with mlpack. If not, see + * http://www.opensource.org/licenses/BSD-3-Clause for more information. + */ +#ifndef MLPACK_METHODS_ANN_INIT_RULES_GAUSSIAN_INIT_HPP +#define MLPACK_METHODS_ANN_INIT_RULES_GAUSSIAN_INIT_HPP + +#include + +namespace mlpack { +namespace ann /** Artificial Neural Network. */ { + +/** + * This class is used to initialize weigth matrix with a gaussian. + */ +class GaussianInitialization +{ + public: + /** + * Initialize the gaussian initialization rule with mean=0 and + * variance = 1. + * + * @param mean The mean of the gaussian. + * @param variance The variance of the gaussian. + */ + GaussianInitialization(): + mean(arma::zeros(1)), covariance(arma::eye(1, 1)) + {} + + /** + * Initialize the random initialization rule with the given bound. + * Using the negative of the bound as lower bound and the positive bound as + * upper bound. + * + * @param bound The number used as lower bound + */ + GaussianInitialization(arma::mat& W, const size_t rows, const size_t cols): + mean(arma::zeros(rows)), covariance(arma::eye(rows, rows)) + {} + + /** + * Initialize the elements weight matrix using a Gaussian Distribution + * of given mean and variance. + * + * @param W Weight matrix to initialize. + * @param rows Number of rows. + * @param cols Number of columns. + */ + void Initialize(arma::mat& W, + const size_t rows, + const size_t cols) + { + W = arma::mat(rows, cols); + distribution::GaussianDistribution dist(mean, covariance); + if (mean.n_elem == 1 && covariance.n_elem == 1) + { + W = arma::randn(size(W)); + } + else + { + for (size_t i = 0; i < W.n_rows; i++) + W.col(i) = dist.Random(); + } + } + + /** + * Initialize randomly the elements of the specified weight 3rd order tensor. + * + * @param W Weight matrix to initialize. + * @param rows Number of rows. + * @param cols Number of columns. + * @param slice Numbers of slices. + */ + void Initialize(arma::cube & W, + const size_t rows, + const size_t cols, + const size_t slices) + { + W = arma::cube(rows, cols, slices); + for (size_t i = 0; i < slices; i++) + Initialize(W.slice(i), rows, cols); + } + + private: + //! Mean of the gaussian. + const arma::vec mean; + + //! Variance of the gaussian. + const arma::mat covariance; +}; // class GaussianInitialization +} // namespace ann +} // namespace mlpack + +#endif diff --git a/src/mlpack/tests/init_rules_test.cpp b/src/mlpack/tests/init_rules_test.cpp index 3ea0f8a6c9..08e1c28e13 100644 --- a/src/mlpack/tests/init_rules_test.cpp +++ b/src/mlpack/tests/init_rules_test.cpp @@ -11,6 +11,7 @@ */ #include +#include #include #include #include @@ -123,4 +124,19 @@ BOOST_AUTO_TEST_CASE(OivsInitTest) BOOST_REQUIRE_EQUAL(1, 1); } +// Test the GaussianInitialization class. +BOOST_AUTO_TEST_CASE(GaussianInitTest) +{ + arma::mat weights; + arma::cube weights3d; + const size_t row = 2; + const size_t col = 2; + const size_t slice = 2; + GaussianInitialization t(weights, row, col); + t.Initialize(weights, row, col); + t.Initialize(weights3d, row, col, slice); + + BOOST_REQUIRE_EQUAL(1, 1); +} + BOOST_AUTO_TEST_SUITE_END(); From b0eacf4209ec1e2938b61b2304b14694589467b3 Mon Sep 17 00:00:00 2001 From: "cs15mtech11007@iith.ac.in" Date: Tue, 21 Feb 2017 23:12:32 +0530 Subject: [PATCH 02/24] Travis error Fixed --- src/mlpack/methods/ann/init_rules/gaussian_init.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mlpack/methods/ann/init_rules/gaussian_init.hpp b/src/mlpack/methods/ann/init_rules/gaussian_init.hpp index 788805a5a0..839a4dc1a5 100644 --- a/src/mlpack/methods/ann/init_rules/gaussian_init.hpp +++ b/src/mlpack/methods/ann/init_rules/gaussian_init.hpp @@ -63,7 +63,7 @@ class GaussianInitialization distribution::GaussianDistribution dist(mean, covariance); if (mean.n_elem == 1 && covariance.n_elem == 1) { - W = arma::randn(size(W)); + W = arma::randn(rows, cols); } else { From d2c2efa03d9ca9f921498464d000ba9d6f2e28ab Mon Sep 17 00:00:00 2001 From: "cs15mtech11007@iith.ac.in" Date: Thu, 16 Mar 2017 13:17:38 +0530 Subject: [PATCH 03/24] change test --- src/mlpack/tests/init_rules_test.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/mlpack/tests/init_rules_test.cpp b/src/mlpack/tests/init_rules_test.cpp index 08e1c28e13..e3ea808968 100644 --- a/src/mlpack/tests/init_rules_test.cpp +++ b/src/mlpack/tests/init_rules_test.cpp @@ -11,13 +11,13 @@ */ #include -#include #include #include #include #include #include #include +#include #include #include "test_tools.hpp" @@ -129,8 +129,8 @@ BOOST_AUTO_TEST_CASE(GaussianInitTest) { arma::mat weights; arma::cube weights3d; - const size_t row = 2; - const size_t col = 2; + const size_t row = 100; + const size_t col = 100; const size_t slice = 2; GaussianInitialization t(weights, row, col); t.Initialize(weights, row, col); From a11abb2cb01c70dcde77e27b0543a10e4edbc3e6 Mon Sep 17 00:00:00 2001 From: "cs15mtech11007@iith.ac.in" Date: Fri, 17 Mar 2017 04:48:58 +0530 Subject: [PATCH 04/24] changes made --- .../methods/ann/init_rules/gaussian_init.hpp | 37 ++++++++----------- src/mlpack/tests/init_rules_test.cpp | 18 +++++++-- 2 files changed, 31 insertions(+), 24 deletions(-) diff --git a/src/mlpack/methods/ann/init_rules/gaussian_init.hpp b/src/mlpack/methods/ann/init_rules/gaussian_init.hpp index 839a4dc1a5..4a39fcefbe 100644 --- a/src/mlpack/methods/ann/init_rules/gaussian_init.hpp +++ b/src/mlpack/methods/ann/init_rules/gaussian_init.hpp @@ -33,23 +33,21 @@ class GaussianInitialization * @param variance The variance of the gaussian. */ GaussianInitialization(): - mean(arma::zeros(1)), covariance(arma::eye(1, 1)) + mean(0), variance(1) {} /** - * Initialize the random initialization rule with the given bound. - * Using the negative of the bound as lower bound and the positive bound as - * upper bound. + * Initialize the gaussian with the given mean and variance. * - * @param bound The number used as lower bound + * @param mean Mean of the gaussian + * @param variance Variance of the gaussian */ - GaussianInitialization(arma::mat& W, const size_t rows, const size_t cols): - mean(arma::zeros(rows)), covariance(arma::eye(rows, rows)) + GaussianInitialization(const double mean=0, const double variance=1): + mean(mean), variance(variance) {} /** - * Initialize the elements weight matrix using a Gaussian Distribution - * of given mean and variance. + * Initialize the elements weight matrix using a Gaussian Distribution. * * @param W Weight matrix to initialize. * @param rows Number of rows. @@ -60,16 +58,13 @@ class GaussianInitialization const size_t cols) { W = arma::mat(rows, cols); - distribution::GaussianDistribution dist(mean, covariance); - if (mean.n_elem == 1 && covariance.n_elem == 1) - { - W = arma::randn(rows, cols); - } - else - { - for (size_t i = 0; i < W.n_rows; i++) - W.col(i) = dist.Random(); - } + arma::vec m(1); + arma::mat v(1,1); + m = {this->mean}; + v = {this->variance}; + distribution::GaussianDistribution dist(m, v); + for (size_t i = 0; i < W.n_rows; i++) + W.col(i) = dist.Random(); } /** @@ -92,10 +87,10 @@ class GaussianInitialization private: //! Mean of the gaussian. - const arma::vec mean; + const double mean; //! Variance of the gaussian. - const arma::mat covariance; + const double variance; }; // class GaussianInitialization } // namespace ann } // namespace mlpack diff --git a/src/mlpack/tests/init_rules_test.cpp b/src/mlpack/tests/init_rules_test.cpp index e3ea808968..35f31cdbc8 100644 --- a/src/mlpack/tests/init_rules_test.cpp +++ b/src/mlpack/tests/init_rules_test.cpp @@ -10,6 +10,7 @@ * http://www.opensource.org/licenses/BSD-3-Clause for more information. */ #include +#include #include #include @@ -24,6 +25,7 @@ using namespace mlpack; using namespace mlpack::ann; +using namespace mlpack::distribution; BOOST_AUTO_TEST_SUITE(InitRulesTest); @@ -132,11 +134,21 @@ BOOST_AUTO_TEST_CASE(GaussianInitTest) const size_t row = 100; const size_t col = 100; const size_t slice = 2; - GaussianInitialization t(weights, row, col); + GaussianInitialization t(5, 1); t.Initialize(weights, row, col); t.Initialize(weights3d, row, col, slice); - - BOOST_REQUIRE_EQUAL(1, 1); + distribution::GaussianDistribution Dist; + Dist.Train(weights); + arma::vec mean = Dist.Mean(); + arma::mat var = Dist.Covariance(); + std::cout << Dist.Covariance() << std::endl; + BOOST_REQUIRE_EQUAL(arma::as_scalar(mean), 5); + BOOST_REQUIRE_EQUAL(arma::as_scalar(var), 1); + Dist.Train(weights3d.slice(1)); + mean = Dist.Mean(); + var = Dist.Covariance(); + BOOST_REQUIRE_EQUAL(arma::as_scalar(mean), 5); + BOOST_REQUIRE_EQUAL(arma::as_scalar(var), 1); } BOOST_AUTO_TEST_SUITE_END(); From f4dd8c1e7584c6feda5a317cdf275222a60f0b18 Mon Sep 17 00:00:00 2001 From: "cs15mtech11007@iith.ac.in" Date: Sun, 19 Mar 2017 08:22:03 +0530 Subject: [PATCH 05/24] Check --- src/mlpack/methods/ann/init_rules/gaussian_init.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mlpack/methods/ann/init_rules/gaussian_init.hpp b/src/mlpack/methods/ann/init_rules/gaussian_init.hpp index 4a39fcefbe..fb46535633 100644 --- a/src/mlpack/methods/ann/init_rules/gaussian_init.hpp +++ b/src/mlpack/methods/ann/init_rules/gaussian_init.hpp @@ -89,7 +89,7 @@ class GaussianInitialization //! Mean of the gaussian. const double mean; - //! Variance of the gaussian. + //! Variance of the gaussian . const double variance; }; // class GaussianInitialization } // namespace ann From 140a3dc26866f956a492db7d7ad4c2bd2ab8c794 Mon Sep 17 00:00:00 2001 From: "cs15mtech11007@iith.ac.in" Date: Sun, 19 Mar 2017 11:23:36 +0530 Subject: [PATCH 06/24] Reduce Size --- src/mlpack/tests/init_rules_test.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/mlpack/tests/init_rules_test.cpp b/src/mlpack/tests/init_rules_test.cpp index 35f31cdbc8..136c109be2 100644 --- a/src/mlpack/tests/init_rules_test.cpp +++ b/src/mlpack/tests/init_rules_test.cpp @@ -131,8 +131,8 @@ BOOST_AUTO_TEST_CASE(GaussianInitTest) { arma::mat weights; arma::cube weights3d; - const size_t row = 100; - const size_t col = 100; + const size_t row = 10; + const size_t col = 10; const size_t slice = 2; GaussianInitialization t(5, 1); t.Initialize(weights, row, col); From 5d675edd7db194955bd72b2559953ac499bf0cbb Mon Sep 17 00:00:00 2001 From: "cs15mtech11007@iith.ac.in" Date: Sun, 19 Mar 2017 12:20:01 +0530 Subject: [PATCH 07/24] minor --- src/mlpack/tests/init_rules_test.cpp | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/mlpack/tests/init_rules_test.cpp b/src/mlpack/tests/init_rules_test.cpp index 136c109be2..a028be3dbb 100644 --- a/src/mlpack/tests/init_rules_test.cpp +++ b/src/mlpack/tests/init_rules_test.cpp @@ -141,14 +141,13 @@ BOOST_AUTO_TEST_CASE(GaussianInitTest) Dist.Train(weights); arma::vec mean = Dist.Mean(); arma::mat var = Dist.Covariance(); - std::cout << Dist.Covariance() << std::endl; - BOOST_REQUIRE_EQUAL(arma::as_scalar(mean), 5); - BOOST_REQUIRE_EQUAL(arma::as_scalar(var), 1); + BOOST_REQUIRE_SMALL(arma::as_scalar(mean)-5, 0.8); + BOOST_REQUIRE_SMALL(arma::as_scalar(var)-1, 0.8); Dist.Train(weights3d.slice(1)); mean = Dist.Mean(); var = Dist.Covariance(); - BOOST_REQUIRE_EQUAL(arma::as_scalar(mean), 5); - BOOST_REQUIRE_EQUAL(arma::as_scalar(var), 1); + BOOST_REQUIRE_SMALL(arma::as_scalar(mean)-5, 0.8); + BOOST_REQUIRE_SMALL(arma::as_scalar(var)-1, 0.8); } BOOST_AUTO_TEST_SUITE_END(); From 49b6542f768fbf9bf1fe7118088844e5541a4ca8 Mon Sep 17 00:00:00 2001 From: "cs15mtech11007@iith.ac.in" Date: Sun, 19 Mar 2017 19:39:11 +0530 Subject: [PATCH 08/24] Final --- .../methods/ann/init_rules/gaussian_init.hpp | 7 +++--- src/mlpack/tests/init_rules_test.cpp | 24 +++++++++---------- 2 files changed, 14 insertions(+), 17 deletions(-) diff --git a/src/mlpack/methods/ann/init_rules/gaussian_init.hpp b/src/mlpack/methods/ann/init_rules/gaussian_init.hpp index fb46535633..1a15d7442f 100644 --- a/src/mlpack/methods/ann/init_rules/gaussian_init.hpp +++ b/src/mlpack/methods/ann/init_rules/gaussian_init.hpp @@ -60,11 +60,10 @@ class GaussianInitialization W = arma::mat(rows, cols); arma::vec m(1); arma::mat v(1,1); - m = {this->mean}; - v = {this->variance}; + m = mean; + v = variance; distribution::GaussianDistribution dist(m, v); - for (size_t i = 0; i < W.n_rows; i++) - W.col(i) = dist.Random(); + W.imbue( [&]() { return arma::as_scalar(dist.Random()); } ); } /** diff --git a/src/mlpack/tests/init_rules_test.cpp b/src/mlpack/tests/init_rules_test.cpp index a028be3dbb..1bd7ca610e 100644 --- a/src/mlpack/tests/init_rules_test.cpp +++ b/src/mlpack/tests/init_rules_test.cpp @@ -131,23 +131,21 @@ BOOST_AUTO_TEST_CASE(GaussianInitTest) { arma::mat weights; arma::cube weights3d; - const size_t row = 10; - const size_t col = 10; + const size_t row = 100; + const size_t col = 100; const size_t slice = 2; - GaussianInitialization t(5, 1); + GaussianInitialization t(0, 1); t.Initialize(weights, row, col); t.Initialize(weights3d, row, col, slice); distribution::GaussianDistribution Dist; - Dist.Train(weights); - arma::vec mean = Dist.Mean(); - arma::mat var = Dist.Covariance(); - BOOST_REQUIRE_SMALL(arma::as_scalar(mean)-5, 0.8); - BOOST_REQUIRE_SMALL(arma::as_scalar(var)-1, 0.8); - Dist.Train(weights3d.slice(1)); - mean = Dist.Mean(); - var = Dist.Covariance(); - BOOST_REQUIRE_SMALL(arma::as_scalar(mean)-5, 0.8); - BOOST_REQUIRE_SMALL(arma::as_scalar(var)-1, 0.8); + double mean = arma::mean(arma::mean(weights));; + double var = arma::accu(pow((weights - mean), 2)) / weights.n_elem; + BOOST_REQUIRE_SMALL(mean-0, 1e-1); + BOOST_REQUIRE_SMALL(var - 1, 1e-1); + mean = arma::mean(arma::mean(weights3d(0)));; + var = arma::accu(pow((weights3d.slice(0) - mean), 2)) / weights3d.slice(0).n_elem; + BOOST_REQUIRE_SMALL(mean-0, 1e-0); + BOOST_REQUIRE_SMALL(var - 1, 1e-0); } BOOST_AUTO_TEST_SUITE_END(); From 22be5050c7b49b30bcc977c71982682316890f9e Mon Sep 17 00:00:00 2001 From: "cs15mtech11007@iith.ac.in" Date: Sun, 19 Mar 2017 21:49:50 +0530 Subject: [PATCH 09/24] test --- src/mlpack/tests/init_rules_test.cpp | 38 ++++++++++++++++++---------- 1 file changed, 25 insertions(+), 13 deletions(-) diff --git a/src/mlpack/tests/init_rules_test.cpp b/src/mlpack/tests/init_rules_test.cpp index 1bd7ca610e..52de858fb9 100644 --- a/src/mlpack/tests/init_rules_test.cpp +++ b/src/mlpack/tests/init_rules_test.cpp @@ -131,21 +131,33 @@ BOOST_AUTO_TEST_CASE(GaussianInitTest) { arma::mat weights; arma::cube weights3d; - const size_t row = 100; - const size_t col = 100; + const size_t row = 5; + const size_t col = 5; const size_t slice = 2; + double mean, mean3d; + double var,var3d; + mean=mean3d=1; + var=var3d=1; GaussianInitialization t(0, 1); - t.Initialize(weights, row, col); - t.Initialize(weights3d, row, col, slice); - distribution::GaussianDistribution Dist; - double mean = arma::mean(arma::mean(weights));; - double var = arma::accu(pow((weights - mean), 2)) / weights.n_elem; - BOOST_REQUIRE_SMALL(mean-0, 1e-1); - BOOST_REQUIRE_SMALL(var - 1, 1e-1); - mean = arma::mean(arma::mean(weights3d(0)));; - var = arma::accu(pow((weights3d.slice(0) - mean), 2)) / weights3d.slice(0).n_elem; - BOOST_REQUIRE_SMALL(mean-0, 1e-0); - BOOST_REQUIRE_SMALL(var - 1, 1e-0); + + for(size_t i =0; i<30; i++) + { + t.Initialize(weights, row, col); + t.Initialize(weights3d, row, col, slice); + distribution::GaussianDistribution Dist; + mean += arma::accu(weights) / weights.n_elem; + var += arma::accu(pow((weights.t() - mean), 2)) / weights.n_elem; + mean3d += arma::accu(weights3d.slice(0)) / weights3d.slice(0).n_elem; + var3d += arma::accu(pow((weights3d.slice(0) - mean), 2)) / weights3d.slice(0).n_elem; + } + mean = mean/30; + var = var/30; + mean3d /= 30; + var3d /= 30; + BOOST_REQUIRE_SMALL(mean-0, 0.5); + BOOST_REQUIRE_SMALL(var - 1, 0.5); + BOOST_REQUIRE_SMALL(mean3d-0, 0.5); + BOOST_REQUIRE_SMALL(var3d - 1, 0.5); } BOOST_AUTO_TEST_SUITE_END(); From a20129533e31314281d4d8d25717f58a3aa4196a Mon Sep 17 00:00:00 2001 From: "cs15mtech11007@iith.ac.in" Date: Sun, 19 Mar 2017 23:02:23 +0530 Subject: [PATCH 10/24] changed std_random --- .../methods/ann/init_rules/gaussian_init.hpp | 12 ++++++---- src/mlpack/tests/init_rules_test.cpp | 24 +++++++++---------- 2 files changed, 20 insertions(+), 16 deletions(-) diff --git a/src/mlpack/methods/ann/init_rules/gaussian_init.hpp b/src/mlpack/methods/ann/init_rules/gaussian_init.hpp index 1a15d7442f..3b10a06729 100644 --- a/src/mlpack/methods/ann/init_rules/gaussian_init.hpp +++ b/src/mlpack/methods/ann/init_rules/gaussian_init.hpp @@ -57,13 +57,17 @@ class GaussianInitialization const size_t rows, const size_t cols) { + std::random_device rd; + std::mt19937 gen(rd()); + std::srand(std::time(0)); W = arma::mat(rows, cols); - arma::vec m(1); - arma::mat v(1,1); + double m; + double v; m = mean; v = variance; - distribution::GaussianDistribution dist(m, v); - W.imbue( [&]() { return arma::as_scalar(dist.Random()); } ); + std::normal_distribution<> d(m, v); + //distribution::GaussianDistribution dist(m, v); + W.imbue( [&]() { return arma::as_scalar(d(gen)); } ); } /** diff --git a/src/mlpack/tests/init_rules_test.cpp b/src/mlpack/tests/init_rules_test.cpp index 52de858fb9..6dd5862405 100644 --- a/src/mlpack/tests/init_rules_test.cpp +++ b/src/mlpack/tests/init_rules_test.cpp @@ -131,33 +131,33 @@ BOOST_AUTO_TEST_CASE(GaussianInitTest) { arma::mat weights; arma::cube weights3d; - const size_t row = 5; - const size_t col = 5; + const size_t row = 7; + const size_t col = 7; const size_t slice = 2; double mean, mean3d; double var,var3d; mean=mean3d=1; var=var3d=1; - GaussianInitialization t(0, 1); + GaussianInitialization t(0, 0.2); - for(size_t i =0; i<30; i++) + for(size_t i =0; i<40; i++) { t.Initialize(weights, row, col); t.Initialize(weights3d, row, col, slice); distribution::GaussianDistribution Dist; mean += arma::accu(weights) / weights.n_elem; - var += arma::accu(pow((weights.t() - mean), 2)) / weights.n_elem; + var += arma::accu(pow((weights.t() - mean), 2)) / weights.n_elem -1 ; mean3d += arma::accu(weights3d.slice(0)) / weights3d.slice(0).n_elem; - var3d += arma::accu(pow((weights3d.slice(0) - mean), 2)) / weights3d.slice(0).n_elem; + var3d += arma::accu(pow((weights3d.slice(0) - mean), 2)) / weights3d.slice(0).n_elem -1; } - mean = mean/30; - var = var/30; - mean3d /= 30; - var3d /= 30; + mean = mean/40; + var = var/40; + mean3d /= 40; + var3d /= 40; BOOST_REQUIRE_SMALL(mean-0, 0.5); - BOOST_REQUIRE_SMALL(var - 1, 0.5); + BOOST_REQUIRE_SMALL(var - 0.2, 0.5); BOOST_REQUIRE_SMALL(mean3d-0, 0.5); - BOOST_REQUIRE_SMALL(var3d - 1, 0.5); + BOOST_REQUIRE_SMALL(var3d - 0.2, 0.5); } BOOST_AUTO_TEST_SUITE_END(); From df963c7eccb7c7b9b8c5e4c42de224081922eac8 Mon Sep 17 00:00:00 2001 From: "cs15mtech11007@iith.ac.in" Date: Mon, 20 Mar 2017 09:13:39 +0530 Subject: [PATCH 11/24] Add seed --- src/mlpack/methods/ann/init_rules/gaussian_init.hpp | 5 +++-- src/mlpack/tests/init_rules_test.cpp | 10 +++++----- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/src/mlpack/methods/ann/init_rules/gaussian_init.hpp b/src/mlpack/methods/ann/init_rules/gaussian_init.hpp index 3b10a06729..bd7065c379 100644 --- a/src/mlpack/methods/ann/init_rules/gaussian_init.hpp +++ b/src/mlpack/methods/ann/init_rules/gaussian_init.hpp @@ -55,11 +55,12 @@ class GaussianInitialization */ void Initialize(arma::mat& W, const size_t rows, - const size_t cols) + const size_t cols, + const size_t seed =21) { std::random_device rd; std::mt19937 gen(rd()); - std::srand(std::time(0)); + std::srand(seed); W = arma::mat(rows, cols); double m; double v; diff --git a/src/mlpack/tests/init_rules_test.cpp b/src/mlpack/tests/init_rules_test.cpp index 6dd5862405..36d8ab2a27 100644 --- a/src/mlpack/tests/init_rules_test.cpp +++ b/src/mlpack/tests/init_rules_test.cpp @@ -140,7 +140,7 @@ BOOST_AUTO_TEST_CASE(GaussianInitTest) var=var3d=1; GaussianInitialization t(0, 0.2); - for(size_t i =0; i<40; i++) + for(size_t i =0; i<10; i++) { t.Initialize(weights, row, col); t.Initialize(weights3d, row, col, slice); @@ -150,10 +150,10 @@ BOOST_AUTO_TEST_CASE(GaussianInitTest) mean3d += arma::accu(weights3d.slice(0)) / weights3d.slice(0).n_elem; var3d += arma::accu(pow((weights3d.slice(0) - mean), 2)) / weights3d.slice(0).n_elem -1; } - mean = mean/40; - var = var/40; - mean3d /= 40; - var3d /= 40; + mean = mean/10; + var = var/10; + mean3d /= 10; + var3d /= 10; BOOST_REQUIRE_SMALL(mean-0, 0.5); BOOST_REQUIRE_SMALL(var - 0.2, 0.5); BOOST_REQUIRE_SMALL(mean3d-0, 0.5); From f9f9258c09d9937548b094cf81073c15526f11fe Mon Sep 17 00:00:00 2001 From: ThyrixYang Date: Mon, 20 Mar 2017 21:18:06 +0800 Subject: [PATCH 12/24] nothing.. --- .../mnist_first250_training_4s_and_9s.arm | Bin 3136027 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 src/mlpack/tests/data/mnist_first250_training_4s_and_9s.arm diff --git a/src/mlpack/tests/data/mnist_first250_training_4s_and_9s.arm b/src/mlpack/tests/data/mnist_first250_training_4s_and_9s.arm deleted file mode 100644 index fd28bbbfbc3657eec44896a69b52903a2e58380d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3136027 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 G|xmf1O!>q5hR{aSn`~7qf2YK1}JB;&1id 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 T`M(#qe$3BF*J+o)oh0yoHz95L From 1b2944a409b52d25fec4c2f16cb9f469683f8018 Mon Sep 17 00:00:00 2001 From: Nauman Mustafa Date: Mon, 20 Mar 2017 20:44:36 +0500 Subject: [PATCH 13/24] Follow standard procedure for 'TestBooleanOption' --- src/mlpack/tests/cli_test.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/mlpack/tests/cli_test.cpp b/src/mlpack/tests/cli_test.cpp index 21f9b6fa27..281796b943 100644 --- a/src/mlpack/tests/cli_test.cpp +++ b/src/mlpack/tests/cli_test.cpp @@ -136,9 +136,9 @@ BOOST_AUTO_TEST_CASE(TestBooleanOption) // Now, if we specify this flag, it should be true. int argc = 2; - char* argv[2]; - argv[0] = strcpy(new char[strlen("programname") + 1], "programname"); - argv[1] = strcpy(new char[strlen("--flag_test") + 1], "--flag_test"); + const char* argv[2]; + argv[0] = "programname"; + argv[1] = "--flag_test"; CLI::ParseCommandLine(argc, argv); From f742b7274ee6606a9de2da5a965ea900d8623cc5 Mon Sep 17 00:00:00 2001 From: Nauman Mustafa Date: Mon, 20 Mar 2017 20:46:13 +0500 Subject: [PATCH 14/24] Fix conversion: const char* to char** --- src/mlpack/tests/cli_test.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/mlpack/tests/cli_test.cpp b/src/mlpack/tests/cli_test.cpp index 281796b943..a1c3ac74e2 100644 --- a/src/mlpack/tests/cli_test.cpp +++ b/src/mlpack/tests/cli_test.cpp @@ -140,13 +140,11 @@ BOOST_AUTO_TEST_CASE(TestBooleanOption) argv[0] = "programname"; argv[1] = "--flag_test"; - CLI::ParseCommandLine(argc, argv); + CLI::ParseCommandLine(argc, const_char(argv)); BOOST_REQUIRE_EQUAL(CLI::GetParam("flag_test"), true); BOOST_REQUIRE_EQUAL(CLI::HasParam("flag_test"), true); - delete[] argv[0]; - delete[] argv[1]; } /** From 2e5c28e734f0f09d6b2cb43eb82b8f90e5f07c2d Mon Sep 17 00:00:00 2001 From: Nauman Mustafa Date: Mon, 20 Mar 2017 22:08:58 +0500 Subject: [PATCH 15/24] Fix error: const_cast instead of const_char --- src/mlpack/tests/cli_test.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mlpack/tests/cli_test.cpp b/src/mlpack/tests/cli_test.cpp index a1c3ac74e2..8a911d8875 100644 --- a/src/mlpack/tests/cli_test.cpp +++ b/src/mlpack/tests/cli_test.cpp @@ -140,7 +140,7 @@ BOOST_AUTO_TEST_CASE(TestBooleanOption) argv[0] = "programname"; argv[1] = "--flag_test"; - CLI::ParseCommandLine(argc, const_char(argv)); + CLI::ParseCommandLine(argc, const_cast(argv)); BOOST_REQUIRE_EQUAL(CLI::GetParam("flag_test"), true); BOOST_REQUIRE_EQUAL(CLI::HasParam("flag_test"), true); From 811bbddad09e053f6a3ec6069abd68a488202c61 Mon Sep 17 00:00:00 2001 From: Sagar B Hathwar Date: Tue, 21 Mar 2017 00:04:54 +0000 Subject: [PATCH 16/24] Uniform interface for Softmax and Logistic Regression --- .../softmax_regression/softmax_regression.hpp | 24 ++- .../softmax_regression_impl.hpp | 76 +++++--- src/mlpack/tests/softmax_regression_test.cpp | 168 ++++++++++++++++++ 3 files changed, 238 insertions(+), 30 deletions(-) diff --git a/src/mlpack/methods/softmax_regression/softmax_regression.hpp b/src/mlpack/methods/softmax_regression/softmax_regression.hpp index dac0c36d1a..8f15bd6f62 100644 --- a/src/mlpack/methods/softmax_regression/softmax_regression.hpp +++ b/src/mlpack/methods/softmax_regression/softmax_regression.hpp @@ -133,6 +133,28 @@ class SoftmaxRegression */ void Classify(const arma::mat& dataset, arma::Row& labels) const; + /** + * Classify the given point. The predicted class label is retured + * The function calculates the probabilites for every class, given the point. + * It then chooses the class which has the highest probability among all + * + * @param point Point to be classified + * @return Predicted class label of the point + */ + template + size_t Classify(const VecType& point) const; + + /** + * Classify the given points. The predicted label is returned + * The function calculates the probabilities for every class, given a data point. + * It then chooses the class which has the highest probability among all + * + * @param dataset Matrix of data points for which are to be classified + * @param probabilities Class probabilities for each point + */ + void Classify(const arma::mat& dataset, + arma::mat& probabilities) const; + /** * Computes accuracy of the learned model given the feature data and the * labels associated with each data point. Predictions are made using the @@ -161,7 +183,7 @@ class SoftmaxRegression * @param numClasses Number of classes for classification. * @return Objective value of the final point. */ - double Train(const arma::mat &data, const arma::Row& labels, + double Train(const arma::mat& data, const arma::Row& labels, const size_t numClasses); //! Sets the number of classes. diff --git a/src/mlpack/methods/softmax_regression/softmax_regression_impl.hpp b/src/mlpack/methods/softmax_regression/softmax_regression_impl.hpp index b818e4e6a6..cda3f9c87e 100644 --- a/src/mlpack/methods/softmax_regression/softmax_regression_impl.hpp +++ b/src/mlpack/methods/softmax_regression/softmax_regression_impl.hpp @@ -75,35 +75,8 @@ void SoftmaxRegression::Classify(const arma::mat& dataset, arma::Row& labels) const { - if (dataset.n_rows != FeatureSize()) - { - std::ostringstream oss; - oss << "SoftmaxRegression::Classify(): dataset has " << dataset.n_rows - << " dimensions, but model has " << FeatureSize() << "dimensions"; - throw std::invalid_argument(oss.str()); - } - - // Calculate the probabilities for each test input. - arma::mat hypothesis, probabilities; - if (fitIntercept) - { - // In order to add the intercept term, we should compute following matrix: - // [1; data] = arma::join_cols(ones(1, data.n_cols), data) - // hypothesis = arma::exp(parameters * [1; data]). - // - // Since the cost of join maybe high due to the copy of original data, - // split the hypothesis computation to two components. - hypothesis = arma::exp( - arma::repmat(parameters.col(0), 1, dataset.n_cols) + - parameters.cols(1, parameters.n_cols - 1) * dataset); - } - else - { - hypothesis = arma::exp(parameters * dataset); - } - - probabilities = hypothesis / arma::repmat(arma::sum(hypothesis, 0), - numClasses, 1); + arma::mat probabilities; + Classify(dataset, probabilities); // Prepare necessary data. labels.zeros(dataset.n_cols); @@ -128,6 +101,51 @@ void SoftmaxRegression::Classify(const arma::mat& dataset, } } +template class OptimizerType> +template +size_t SoftmaxRegression::Classify(const VecType& point) const +{ + arma::Row label(1); + Classify(point, label); + return size_t(label(0)); +} + +template class OptimizerType> +void SoftmaxRegression::Classify(const arma::mat& dataset, + arma::mat& probabilities) + const +{ + if (dataset.n_rows != FeatureSize()) + { + std::ostringstream oss; + oss << "SoftmaxRegression::Classify(): dataset has " << dataset.n_rows + << " dimensions, but model has " << FeatureSize() << "dimensions"; + throw std::invalid_argument(oss.str()); + } + + // Calculate the probabilities for each test input. + arma::mat hypothesis; + if (fitIntercept) + { + // In order to add the intercept term, we should compute following matrix: + // [1; data] = arma::join_cols(ones(1, data.n_cols), data) + // hypothesis = arma::exp(parameters * [1; data]). + // + // Since the cost of join maybe high due to the copy of original data, + // split the hypothesis computation to two components. + hypothesis = arma::exp( + arma::repmat(parameters.col(0), 1, dataset.n_cols) + + parameters.cols(1, parameters.n_cols - 1) * dataset); + } + else + { + hypothesis = arma::exp(parameters * dataset); + } + + probabilities = hypothesis / arma::repmat(arma::sum(hypothesis, 0), + numClasses, 1); +} + template class OptimizerType> double SoftmaxRegression::ComputeAccuracy( const arma::mat& testData, diff --git a/src/mlpack/tests/softmax_regression_test.cpp b/src/mlpack/tests/softmax_regression_test.cpp index d749582aba..1b36f5c2d6 100644 --- a/src/mlpack/tests/softmax_regression_test.cpp +++ b/src/mlpack/tests/softmax_regression_test.cpp @@ -413,4 +413,172 @@ BOOST_AUTO_TEST_CASE(SoftmaxRegressionOptimizerTrainTest) } } +BOOST_AUTO_TEST_CASE(SoftmaxRegressionClassifySinglePointTest) +{ + const size_t points = 5000; + const size_t inputSize = 5; + const size_t numClasses = 5; + const double lambda = 0.5; + + // Generate five-Gaussian dataset. + arma::mat identity = arma::eye(5, 5); + GaussianDistribution g1(arma::vec("1.0 9.0 1.0 2.0 2.0"), identity); + GaussianDistribution g2(arma::vec("4.0 3.0 4.0 2.0 2.0"), identity); + GaussianDistribution g3(arma::vec("3.0 2.0 7.0 0.0 5.0"), identity); + GaussianDistribution g4(arma::vec("4.0 1.0 1.0 2.0 7.0"), identity); + GaussianDistribution g5(arma::vec("1.0 0.0 1.0 8.0 3.0"), identity); + + arma::mat data(inputSize, points); + arma::Row labels(points); + + for (size_t i = 0; i < points / 5; i++) + { + data.col(i) = g1.Random(); + labels(i) = 0; + } + for (size_t i = points / 5; i < (2 * points) / 5; i++) + { + data.col(i) = g2.Random(); + labels(i) = 1; + } + for (size_t i = (2 * points) / 5; i < (3 * points) / 5; i++) + { + data.col(i) = g3.Random(); + labels(i) = 2; + } + for (size_t i = (3 * points) / 5; i < (4 * points) / 5; i++) + { + data.col(i) = g4.Random(); + labels(i) = 3; + } + for (size_t i = (4 * points) / 5; i < points; i++) + { + data.col(i) = g5.Random(); + labels(i) = 4; + } + + // Train softmax regression object. + SoftmaxRegression<> sr(data, labels, numClasses, lambda); + + // Create test dataset. + for (size_t i = 0; i < points / 5; i++) + { + data.col(i) = g1.Random(); + labels(i) = 0; + } + for (size_t i = points / 5; i < (2 * points) / 5; i++) + { + data.col(i) = g2.Random(); + labels(i) = 1; + } + for (size_t i = (2 * points) / 5; i < (3 * points) / 5; i++) + { + data.col(i) = g3.Random(); + labels(i) = 2; + } + for (size_t i = (3 * points) / 5; i < (4 * points) / 5; i++) + { + data.col(i) = g4.Random(); + labels(i) = 3; + } + for (size_t i = (4 * points) / 5; i < points; i++) + { + data.col(i) = g5.Random(); + labels(i) = 4; + } + + sr.Classify(data, labels); + + for(size_t i = 0; i < data.n_cols; ++i) + { + BOOST_REQUIRE_EQUAL(sr.Classify(data.col(i)), labels(i)); + } +} + +BOOST_AUTO_TEST_CASE(SoftmaxRegressionComputeProbabilitiesTest) +{ + const size_t points = 5000; + const size_t inputSize = 5; + const size_t numClasses = 5; + const double lambda = 0.5; + + // Generate five-Gaussian dataset. + arma::mat identity = arma::eye(5, 5); + GaussianDistribution g1(arma::vec("1.0 9.0 1.0 2.0 2.0"), identity); + GaussianDistribution g2(arma::vec("4.0 3.0 4.0 2.0 2.0"), identity); + GaussianDistribution g3(arma::vec("3.0 2.0 7.0 0.0 5.0"), identity); + GaussianDistribution g4(arma::vec("4.0 1.0 1.0 2.0 7.0"), identity); + GaussianDistribution g5(arma::vec("1.0 0.0 1.0 8.0 3.0"), identity); + + arma::mat data(inputSize, points); + arma::Row labels(points); + + for (size_t i = 0; i < points / 5; i++) + { + data.col(i) = g1.Random(); + labels(i) = 0; + } + for (size_t i = points / 5; i < (2 * points) / 5; i++) + { + data.col(i) = g2.Random(); + labels(i) = 1; + } + for (size_t i = (2 * points) / 5; i < (3 * points) / 5; i++) + { + data.col(i) = g3.Random(); + labels(i) = 2; + } + for (size_t i = (3 * points) / 5; i < (4 * points) / 5; i++) + { + data.col(i) = g4.Random(); + labels(i) = 3; + } + for (size_t i = (4 * points) / 5; i < points; i++) + { + data.col(i) = g5.Random(); + labels(i) = 4; + } + + // Train softmax regression object. + SoftmaxRegression<> sr(data, labels, numClasses, lambda); + + // Create test dataset. + for (size_t i = 0; i < points / 5; i++) + { + data.col(i) = g1.Random(); + labels(i) = 0; + } + for (size_t i = points / 5; i < (2 * points) / 5; i++) + { + data.col(i) = g2.Random(); + labels(i) = 1; + } + for (size_t i = (2 * points) / 5; i < (3 * points) / 5; i++) + { + data.col(i) = g3.Random(); + labels(i) = 2; + } + for (size_t i = (3 * points) / 5; i < (4 * points) / 5; i++) + { + data.col(i) = g4.Random(); + labels(i) = 3; + } + for (size_t i = (4 * points) / 5; i < points; i++) + { + data.col(i) = g5.Random(); + labels(i) = 4; + } + + arma::mat probabilities; + sr.Classify(data, probabilities); + + BOOST_REQUIRE_EQUAL(probabilities.n_cols, data.n_cols); + BOOST_REQUIRE_EQUAL(probabilities.n_rows, sr.NumClasses()); + + for(size_t i = 0; i < data.n_cols; ++i) + { + BOOST_REQUIRE_CLOSE(arma::sum(probabilities.col(i)), 1.0, 1e-5); + } +} + BOOST_AUTO_TEST_SUITE_END(); From 8b55c58a72b9a20bc36fbc6690729040c62b2e6c Mon Sep 17 00:00:00 2001 From: Ryan Curtin Date: Wed, 22 Mar 2017 13:59:29 -0400 Subject: [PATCH 17/24] Catch all possible types for uword and size_t. This may cause compile time to increase slightly, but it handles all (typical) situations for size_t and uword. --- src/mlpack/core/data/load.cpp | 57 +++++++++++++++++++++-------------- src/mlpack/core/data/load.hpp | 47 ++++++++++++++++------------- 2 files changed, 60 insertions(+), 44 deletions(-) diff --git a/src/mlpack/core/data/load.cpp b/src/mlpack/core/data/load.cpp index 1a57b8173b..16cae0bc0f 100644 --- a/src/mlpack/core/data/load.cpp +++ b/src/mlpack/core/data/load.cpp @@ -20,10 +20,20 @@ template bool Load(const std::string&, const bool, const bool); -template bool Load(const std::string&, - arma::Mat&, - const bool, - const bool); +template bool Load(const std::string&, + arma::Mat&, + const bool, + const bool); + +template bool Load(const std::string&, + arma::Mat&, + const bool, + const bool); + +template bool Load(const std::string&, + arma::Mat&, + const bool, + const bool); template bool Load(const std::string&, arma::Mat&, @@ -35,22 +45,32 @@ template bool Load(const std::string&, const bool, const bool); -template bool Load(const std::string&, - arma::Mat&, - const bool, - const bool); - template bool Load(const std::string&, arma::Mat&, DatasetMapper&, const bool, const bool); -template bool Load(const std::string&, - arma::Mat&, - DatasetMapper&, - const bool, - const bool); +template bool Load( + const std::string&, + arma::Mat&, + DatasetMapper&, + const bool, + const bool); + +template bool Load( + const std::string&, + arma::Mat&, + DatasetMapper&, + const bool, + const bool); + +template bool Load( + const std::string&, + arma::Mat&, + DatasetMapper&, + const bool, + const bool); template bool Load(const std::string&, arma::Mat&, @@ -64,14 +84,5 @@ template bool Load(const std::string&, const bool, const bool); -#ifndef _WIN32 -template bool Load( - const std::string&, - arma::Mat&, - DatasetMapper&, - const bool, - const bool); -#endif - } // namespace data } // namespace mlpack diff --git a/src/mlpack/core/data/load.hpp b/src/mlpack/core/data/load.hpp index db58166e49..767ac0d3cd 100644 --- a/src/mlpack/core/data/load.hpp +++ b/src/mlpack/core/data/load.hpp @@ -69,27 +69,32 @@ extern template bool Load(const std::string&, const bool, const bool); -extern template bool Load(const std::string&, - arma::Mat&, - const bool, - const bool); +// size_t and uword should be one of these three typedefs. +extern template bool Load(const std::string&, + arma::Mat&, + const bool, + const bool); + +extern template bool Load(const std::string&, + arma::Mat&, + const bool, + const bool); + +extern template bool Load(const std::string&, + arma::Mat&, + const bool, + const bool); + extern template bool Load(const std::string&, arma::Mat&, const bool, const bool); + extern template bool Load(const std::string&, arma::Mat&, const bool, const bool); -#ifndef _WIN32 -extern template bool Load( - const std::string&, - arma::Mat&, - const bool, - const bool); -#endif - /** * Load a column vector from a file, guessing the filetype from the extension. * @@ -200,9 +205,16 @@ extern template bool Load( const bool, const bool); -extern template bool Load( +extern template bool Load( const std::string&, - arma::Mat&, + arma::Mat&, + DatasetMapper&, + const bool, + const bool); + +extern template bool Load( + const std::string&, + arma::Mat&, DatasetMapper&, const bool, const bool); @@ -221,13 +233,6 @@ extern template bool Load( const bool, const bool); -extern template bool Load( - const std::string&, - arma::Mat&, - DatasetMapper&, - const bool, - const bool); - /** * Load a model from a file, guessing the filetype from the extension, or, * optionally, loading the specified format. If automatic extension detection From 76ea688e322c1b0aff0e2f02b177c2f9a2cf8f49 Mon Sep 17 00:00:00 2001 From: Sagar B Hathwar Date: Thu, 23 Mar 2017 05:39:57 +0000 Subject: [PATCH 18/24] Added an overload for Classify. Typo corrections --- COPYRIGHT.txt | 1 + src/mlpack/core.hpp | 1 + .../softmax_regression/softmax_regression.hpp | 28 ++++-- .../softmax_regression_impl.hpp | 18 ++++ src/mlpack/tests/softmax_regression_test.cpp | 90 +++++++++++++++++++ 5 files changed, 129 insertions(+), 9 deletions(-) diff --git a/COPYRIGHT.txt b/COPYRIGHT.txt index e50b077ace..8f510b8f62 100644 --- a/COPYRIGHT.txt +++ b/COPYRIGHT.txt @@ -73,6 +73,7 @@ Copyright: Copyright 2017, Lakshya Agrawal Copyright 2017, Praveen Ch Copyright 2017, Kirill Mishchenko + Copyright 2017, Sagar B Hathwar License: BSD-3-clause All rights reserved. diff --git a/src/mlpack/core.hpp b/src/mlpack/core.hpp index 915a3c135a..8d27a1a9bc 100644 --- a/src/mlpack/core.hpp +++ b/src/mlpack/core.hpp @@ -214,6 +214,7 @@ * - Vivek Pal * - Praveen Ch * - Kirill Mishchenko + * - Sagar B Hathwar */ // First, include all of the prerequisites. diff --git a/src/mlpack/methods/softmax_regression/softmax_regression.hpp b/src/mlpack/methods/softmax_regression/softmax_regression.hpp index 8f15bd6f62..741d6415bd 100644 --- a/src/mlpack/methods/softmax_regression/softmax_regression.hpp +++ b/src/mlpack/methods/softmax_regression/softmax_regression.hpp @@ -134,23 +134,33 @@ class SoftmaxRegression void Classify(const arma::mat& dataset, arma::Row& labels) const; /** - * Classify the given point. The predicted class label is retured + * Classify the given point. The predicted class label is returned. * The function calculates the probabilites for every class, given the point. - * It then chooses the class which has the highest probability among all + * It then chooses the class which has the highest probability among all. * - * @param point Point to be classified - * @return Predicted class label of the point + * @param point Point to be classified. + * @return Predicted class label of the point. */ template size_t Classify(const VecType& point) const; /** - * Classify the given points. The predicted label is returned - * The function calculates the probabilities for every class, given a data point. - * It then chooses the class which has the highest probability among all + * Classify the given points. The class probabilities for each point is computed. + * For each point, the class with the highest probability among all is chosen. + * The class labels and class probabilities for each point are returned. * - * @param dataset Matrix of data points for which are to be classified - * @param probabilities Class probabilities for each point + * @param dataset Matrix of data points to be classified. + * @param labels Predicted labels for each point. + * @param probabilities Class probabilities for each point. + */ + void Classify(const arma::mat& dataset, arma::Row& labels, + arma::mat& probabilites) const; + + /** + * Classify the given points. The class probabilities for each point is returned. + * + * @param dataset Matrix of data points to be classified. + * @param probabilities Class probabilities for each point. */ void Classify(const arma::mat& dataset, arma::mat& probabilities) const; diff --git a/src/mlpack/methods/softmax_regression/softmax_regression_impl.hpp b/src/mlpack/methods/softmax_regression/softmax_regression_impl.hpp index cda3f9c87e..cd8d658efc 100644 --- a/src/mlpack/methods/softmax_regression/softmax_regression_impl.hpp +++ b/src/mlpack/methods/softmax_regression/softmax_regression_impl.hpp @@ -110,6 +110,24 @@ size_t SoftmaxRegression::Classify(const VecType& point) const return size_t(label(0)); } +template class OptimizerType> +void SoftmaxRegression::Classify(const arma::mat& dataset, + arma::Row& labels, + arma::mat& probabilites) + const +{ + Classify(dataset, probabilites); + + // Initialize each label to 0. + labels.zeros(dataset.n_cols); + + // For each column, choose the class with the highest probability + for(size_t i = 0; i < dataset.n_cols; i++) + { + labels(i) = probabilites.col(i).index_max(); + } +} + template class OptimizerType> void SoftmaxRegression::Classify(const arma::mat& dataset, arma::mat& probabilities) diff --git a/src/mlpack/tests/softmax_regression_test.cpp b/src/mlpack/tests/softmax_regression_test.cpp index 1b36f5c2d6..d5741843b3 100644 --- a/src/mlpack/tests/softmax_regression_test.cpp +++ b/src/mlpack/tests/softmax_regression_test.cpp @@ -581,4 +581,94 @@ BOOST_AUTO_TEST_CASE(SoftmaxRegressionComputeProbabilitiesTest) } } +BOOST_AUTO_TEST_CASE(SoftmaxRegressionComputeProbabilitiesAndLabelsTest) +{ + const size_t points = 5000; + const size_t inputSize = 5; + const size_t numClasses = 5; + const double lambda = 0.5; + + // Generate five-Gaussian dataset. + arma::mat identity = arma::eye(5, 5); + GaussianDistribution g1(arma::vec("1.0 9.0 1.0 2.0 2.0"), identity); + GaussianDistribution g2(arma::vec("4.0 3.0 4.0 2.0 2.0"), identity); + GaussianDistribution g3(arma::vec("3.0 2.0 7.0 0.0 5.0"), identity); + GaussianDistribution g4(arma::vec("4.0 1.0 1.0 2.0 7.0"), identity); + GaussianDistribution g5(arma::vec("1.0 0.0 1.0 8.0 3.0"), identity); + + arma::mat data(inputSize, points); + arma::Row labels(points); + + for (size_t i = 0; i < points / 5; i++) + { + data.col(i) = g1.Random(); + labels(i) = 0; + } + for (size_t i = points / 5; i < (2 * points) / 5; i++) + { + data.col(i) = g2.Random(); + labels(i) = 1; + } + for (size_t i = (2 * points) / 5; i < (3 * points) / 5; i++) + { + data.col(i) = g3.Random(); + labels(i) = 2; + } + for (size_t i = (3 * points) / 5; i < (4 * points) / 5; i++) + { + data.col(i) = g4.Random(); + labels(i) = 3; + } + for (size_t i = (4 * points) / 5; i < points; i++) + { + data.col(i) = g5.Random(); + labels(i) = 4; + } + + // Train softmax regression object. + SoftmaxRegression<> sr(data, labels, numClasses, lambda); + + // Create test dataset. + for (size_t i = 0; i < points / 5; i++) + { + data.col(i) = g1.Random(); + labels(i) = 0; + } + for (size_t i = points / 5; i < (2 * points) / 5; i++) + { + data.col(i) = g2.Random(); + labels(i) = 1; + } + for (size_t i = (2 * points) / 5; i < (3 * points) / 5; i++) + { + data.col(i) = g3.Random(); + labels(i) = 2; + } + for (size_t i = (3 * points) / 5; i < (4 * points) / 5; i++) + { + data.col(i) = g4.Random(); + labels(i) = 3; + } + for (size_t i = (4 * points) / 5; i < points; i++) + { + data.col(i) = g5.Random(); + labels(i) = 4; + } + + arma::mat probabilities; + arma::Row testLabels; + + sr.Classify(data, labels); + sr.Classify(data, testLabels, probabilities); + + BOOST_REQUIRE_EQUAL(probabilities.n_cols, data.n_cols); + BOOST_REQUIRE_EQUAL(probabilities.n_rows, sr.NumClasses()); + + for(size_t i = 0; i < data.n_cols; ++i) + { + BOOST_REQUIRE_CLOSE(arma::sum(probabilities.col(i)), 1.0, 1e-5); + BOOST_REQUIRE_EQUAL(testLabels(i), labels(i)); + } +} + BOOST_AUTO_TEST_SUITE_END(); From b07521a3dea424803545317f78c5ace81612f0b5 Mon Sep 17 00:00:00 2001 From: "cs15mtech11007@iith.ac.in" Date: Thu, 23 Mar 2017 11:32:27 +0530 Subject: [PATCH 19/24] Changes Done --- .../methods/ann/init_rules/gaussian_init.hpp | 13 +++++-------- src/mlpack/tests/init_rules_test.cpp | 14 +++++++------- 2 files changed, 12 insertions(+), 15 deletions(-) diff --git a/src/mlpack/methods/ann/init_rules/gaussian_init.hpp b/src/mlpack/methods/ann/init_rules/gaussian_init.hpp index bd7065c379..2620d60b80 100644 --- a/src/mlpack/methods/ann/init_rules/gaussian_init.hpp +++ b/src/mlpack/methods/ann/init_rules/gaussian_init.hpp @@ -15,6 +15,9 @@ #define MLPACK_METHODS_ANN_INIT_RULES_GAUSSIAN_INIT_HPP #include +#include + +using namespace mlpack::math; namespace mlpack { namespace ann /** Artificial Neural Network. */ { @@ -55,20 +58,14 @@ class GaussianInitialization */ void Initialize(arma::mat& W, const size_t rows, - const size_t cols, - const size_t seed =21) + const size_t cols) { - std::random_device rd; - std::mt19937 gen(rd()); - std::srand(seed); W = arma::mat(rows, cols); double m; double v; m = mean; v = variance; - std::normal_distribution<> d(m, v); - //distribution::GaussianDistribution dist(m, v); - W.imbue( [&]() { return arma::as_scalar(d(gen)); } ); + W.imbue( [&]() { return arma::as_scalar(RandNormal(m, v)); } ); } /** diff --git a/src/mlpack/tests/init_rules_test.cpp b/src/mlpack/tests/init_rules_test.cpp index 36d8ab2a27..fce6174317 100644 --- a/src/mlpack/tests/init_rules_test.cpp +++ b/src/mlpack/tests/init_rules_test.cpp @@ -10,6 +10,7 @@ * http://www.opensource.org/licenses/BSD-3-Clause for more information. */ #include +#include #include #include @@ -20,12 +21,12 @@ #include #include + #include #include "test_tools.hpp" using namespace mlpack; using namespace mlpack::ann; -using namespace mlpack::distribution; BOOST_AUTO_TEST_SUITE(InitRulesTest); @@ -139,12 +140,11 @@ BOOST_AUTO_TEST_CASE(GaussianInitTest) mean=mean3d=1; var=var3d=1; GaussianInitialization t(0, 0.2); - + RandomSeed(21); for(size_t i =0; i<10; i++) { t.Initialize(weights, row, col); t.Initialize(weights3d, row, col, slice); - distribution::GaussianDistribution Dist; mean += arma::accu(weights) / weights.n_elem; var += arma::accu(pow((weights.t() - mean), 2)) / weights.n_elem -1 ; mean3d += arma::accu(weights3d.slice(0)) / weights3d.slice(0).n_elem; @@ -154,10 +154,10 @@ BOOST_AUTO_TEST_CASE(GaussianInitTest) var = var/10; mean3d /= 10; var3d /= 10; - BOOST_REQUIRE_SMALL(mean-0, 0.5); - BOOST_REQUIRE_SMALL(var - 0.2, 0.5); - BOOST_REQUIRE_SMALL(mean3d-0, 0.5); - BOOST_REQUIRE_SMALL(var3d - 0.2, 0.5); + BOOST_REQUIRE(mean < 0.2); + BOOST_REQUIRE(var < 0.4); + BOOST_REQUIRE(mean3d < 0.2); + BOOST_REQUIRE(var3d < 0.4); } BOOST_AUTO_TEST_SUITE_END(); From 741807958e5861f50f29efba41bc5faaae680662 Mon Sep 17 00:00:00 2001 From: Sagar B Hathwar Date: Thu, 23 Mar 2017 06:38:18 +0000 Subject: [PATCH 20/24] Fixed compatibility with Armadillo < 7.300 --- .../softmax_regression/softmax_regression.hpp | 10 +++++--- .../softmax_regression_impl.hpp | 25 ++++++++++++++----- 2 files changed, 25 insertions(+), 10 deletions(-) diff --git a/src/mlpack/methods/softmax_regression/softmax_regression.hpp b/src/mlpack/methods/softmax_regression/softmax_regression.hpp index 741d6415bd..92365438d2 100644 --- a/src/mlpack/methods/softmax_regression/softmax_regression.hpp +++ b/src/mlpack/methods/softmax_regression/softmax_regression.hpp @@ -145,9 +145,11 @@ class SoftmaxRegression size_t Classify(const VecType& point) const; /** - * Classify the given points. The class probabilities for each point is computed. - * For each point, the class with the highest probability among all is chosen. - * The class labels and class probabilities for each point are returned. + * Classify the given points, returning class probabilities and predicted + * class label for each point. + * The function calculates the probabilities for every class, given a data + * point. It then chooses the class which has the highest probability among + * all. * * @param dataset Matrix of data points to be classified. * @param labels Predicted labels for each point. @@ -157,7 +159,7 @@ class SoftmaxRegression arma::mat& probabilites) const; /** - * Classify the given points. The class probabilities for each point is returned. + * Classify the given points, returning class probabilities for each point. * * @param dataset Matrix of data points to be classified. * @param probabilities Class probabilities for each point. diff --git a/src/mlpack/methods/softmax_regression/softmax_regression_impl.hpp b/src/mlpack/methods/softmax_regression/softmax_regression_impl.hpp index cd8d658efc..57c4f78b4e 100644 --- a/src/mlpack/methods/softmax_regression/softmax_regression_impl.hpp +++ b/src/mlpack/methods/softmax_regression/softmax_regression_impl.hpp @@ -113,18 +113,31 @@ size_t SoftmaxRegression::Classify(const VecType& point) const template class OptimizerType> void SoftmaxRegression::Classify(const arma::mat& dataset, arma::Row& labels, - arma::mat& probabilites) + arma::mat& probabilities) const { - Classify(dataset, probabilites); + Classify(dataset, probabilities); - // Initialize each label to 0. + // Prepare necessary data. labels.zeros(dataset.n_cols); + double maxProbability = 0; - // For each column, choose the class with the highest probability - for(size_t i = 0; i < dataset.n_cols; i++) + // For each test input. + for (size_t i = 0; i < dataset.n_cols; i++) { - labels(i) = probabilites.col(i).index_max(); + // For each class. + for (size_t j = 0; j < numClasses; j++) + { + // If a higher class probability is encountered, change prediction. + if (probabilities(j, i) > maxProbability) + { + maxProbability = probabilities(j, i); + labels(i) = j; + } + } + + // Set maximum probability to zero for the next input. + maxProbability = 0; } } From 7a9f1fb4e1aefc6d87ba29866fc461deac8084bb Mon Sep 17 00:00:00 2001 From: "cs15mtech11007@iith.ac.in" Date: Fri, 24 Mar 2017 00:08:17 +0530 Subject: [PATCH 21/24] Test Changed --- .../methods/ann/init_rules/gaussian_init.hpp | 6 +-- src/mlpack/tests/init_rules_test.cpp | 38 ++++++++++--------- 2 files changed, 22 insertions(+), 22 deletions(-) diff --git a/src/mlpack/methods/ann/init_rules/gaussian_init.hpp b/src/mlpack/methods/ann/init_rules/gaussian_init.hpp index 2620d60b80..f0bdd5b7a6 100644 --- a/src/mlpack/methods/ann/init_rules/gaussian_init.hpp +++ b/src/mlpack/methods/ann/init_rules/gaussian_init.hpp @@ -61,11 +61,7 @@ class GaussianInitialization const size_t cols) { W = arma::mat(rows, cols); - double m; - double v; - m = mean; - v = variance; - W.imbue( [&]() { return arma::as_scalar(RandNormal(m, v)); } ); + W.imbue( [&]() { return arma::as_scalar(RandNormal(mean, variance)); } ); } /** diff --git a/src/mlpack/tests/init_rules_test.cpp b/src/mlpack/tests/init_rules_test.cpp index fce6174317..758cb0439d 100644 --- a/src/mlpack/tests/init_rules_test.cpp +++ b/src/mlpack/tests/init_rules_test.cpp @@ -11,7 +11,6 @@ */ #include #include -#include #include #include @@ -132,6 +131,7 @@ BOOST_AUTO_TEST_CASE(GaussianInitTest) { arma::mat weights; arma::cube weights3d; + size_t counter = 0; const size_t row = 7; const size_t col = 7; const size_t slice = 2; @@ -140,24 +140,28 @@ BOOST_AUTO_TEST_CASE(GaussianInitTest) mean=mean3d=1; var=var3d=1; GaussianInitialization t(0, 0.2); - RandomSeed(21); - for(size_t i =0; i<10; i++) + //RandomSeed(21); + for(size_t j=0; j<5; j++) { - t.Initialize(weights, row, col); - t.Initialize(weights3d, row, col, slice); - mean += arma::accu(weights) / weights.n_elem; - var += arma::accu(pow((weights.t() - mean), 2)) / weights.n_elem -1 ; - mean3d += arma::accu(weights3d.slice(0)) / weights3d.slice(0).n_elem; - var3d += arma::accu(pow((weights3d.slice(0) - mean), 2)) / weights3d.slice(0).n_elem -1; + for(size_t i =0; i<10; i++) + { + t.Initialize(weights, row, col); + t.Initialize(weights3d, row, col, slice); + mean += arma::accu(weights) / weights.n_elem; + var += arma::accu(pow((weights.t() - mean), 2)) / weights.n_elem -1 ; + mean3d += arma::accu(weights3d.slice(0)) / weights3d.slice(0).n_elem; + var3d += arma::accu(pow((weights3d.slice(0) - mean), 2)) / weights3d.slice(0).n_elem -1; + } + mean /= 10; + var /= 10; + mean3d /= 10; + var3d /= 10; + if((mean > 0 && mean < 0.4) && (var > 0 && var < 0.6) && + (mean3d > 0 && mean3d < 0.4) && (var3d >0 && var3d<0.6)) + counter++; } - mean = mean/10; - var = var/10; - mean3d /= 10; - var3d /= 10; - BOOST_REQUIRE(mean < 0.2); - BOOST_REQUIRE(var < 0.4); - BOOST_REQUIRE(mean3d < 0.2); - BOOST_REQUIRE(var3d < 0.4); + + BOOST_REQUIRE(counter >= 1); } BOOST_AUTO_TEST_SUITE_END(); From 2dac4084e92e8cc6362b8a3b6a12bbf209c2c89f Mon Sep 17 00:00:00 2001 From: Ryan Curtin Date: Thu, 23 Mar 2017 17:28:27 -0400 Subject: [PATCH 22/24] Add sanity check on data size. --- .../decision_tree/decision_tree_impl.hpp | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/mlpack/methods/decision_tree/decision_tree_impl.hpp b/src/mlpack/methods/decision_tree/decision_tree_impl.hpp index 49b9cea084..0104f006d2 100644 --- a/src/mlpack/methods/decision_tree/decision_tree_impl.hpp +++ b/src/mlpack/methods/decision_tree/decision_tree_impl.hpp @@ -227,6 +227,16 @@ void DecisionTree Date: Fri, 24 Mar 2017 16:56:13 +0100 Subject: [PATCH 23/24] Minor style fixes (80 columns, spaces between operations). --- .../methods/ann/init_rules/gaussian_init.hpp | 23 ++++------ src/mlpack/tests/init_rules_test.cpp | 44 +++++++++++++------ 2 files changed, 38 insertions(+), 29 deletions(-) diff --git a/src/mlpack/methods/ann/init_rules/gaussian_init.hpp b/src/mlpack/methods/ann/init_rules/gaussian_init.hpp index f0bdd5b7a6..aa4120e8f2 100644 --- a/src/mlpack/methods/ann/init_rules/gaussian_init.hpp +++ b/src/mlpack/methods/ann/init_rules/gaussian_init.hpp @@ -28,26 +28,17 @@ namespace ann /** Artificial Neural Network. */ { class GaussianInitialization { public: - /** - * Initialize the gaussian initialization rule with mean=0 and - * variance = 1. - * - * @param mean The mean of the gaussian. - * @param variance The variance of the gaussian. - */ - GaussianInitialization(): - mean(0), variance(1) - {} - /** * Initialize the gaussian with the given mean and variance. * * @param mean Mean of the gaussian * @param variance Variance of the gaussian */ - GaussianInitialization(const double mean=0, const double variance=1): - mean(mean), variance(variance) - {} + GaussianInitialization(const double mean = 0, const double variance = 1) : + mean(mean), variance(variance) + { + // Nothing to do here. + } /** * Initialize the elements weight matrix using a Gaussian Distribution. @@ -78,6 +69,7 @@ class GaussianInitialization const size_t slices) { W = arma::cube(rows, cols, slices); + for (size_t i = 0; i < slices; i++) Initialize(W.slice(i), rows, cols); } @@ -86,9 +78,10 @@ class GaussianInitialization //! Mean of the gaussian. const double mean; - //! Variance of the gaussian . + //! Variance of the gaussian. const double variance; }; // class GaussianInitialization + } // namespace ann } // namespace mlpack diff --git a/src/mlpack/tests/init_rules_test.cpp b/src/mlpack/tests/init_rules_test.cpp index 758cb0439d..7880724908 100644 --- a/src/mlpack/tests/init_rules_test.cpp +++ b/src/mlpack/tests/init_rules_test.cpp @@ -129,36 +129,52 @@ BOOST_AUTO_TEST_CASE(OivsInitTest) // Test the GaussianInitialization class. BOOST_AUTO_TEST_CASE(GaussianInitTest) { - arma::mat weights; - arma::cube weights3d; - size_t counter = 0; const size_t row = 7; const size_t col = 7; const size_t slice = 2; - double mean, mean3d; - double var,var3d; - mean=mean3d=1; - var=var3d=1; + + double mean = 1; + double mean3d = 1; + double var = 1; + double var3d = 1; + + arma::mat weights; + arma::cube weights3d; + GaussianInitialization t(0, 0.2); - //RandomSeed(21); - for(size_t j=0; j<5; j++) + + // It isn't guaranteed that the method will converge in the specified number + // of iterations using random weights. If this works 1 of 5 times, I'm fine + // with that. + size_t counter = 0; + for(size_t trial = 0; trial < 5; trial++) { - for(size_t i =0; i<10; i++) + for(size_t i = 0; i < 10; i++) { t.Initialize(weights, row, col); t.Initialize(weights3d, row, col, slice); + + // Calaculate mean and variance over the dense matrix. mean += arma::accu(weights) / weights.n_elem; - var += arma::accu(pow((weights.t() - mean), 2)) / weights.n_elem -1 ; + var += arma::accu(pow((weights.t() - mean), 2)) / weights.n_elem - 1; + + // Calaculate mean and variance over the 3rd order tensor. mean3d += arma::accu(weights3d.slice(0)) / weights3d.slice(0).n_elem; - var3d += arma::accu(pow((weights3d.slice(0) - mean), 2)) / weights3d.slice(0).n_elem -1; + var3d += arma::accu(pow((weights3d.slice(0) - mean), 2)) / + weights3d.slice(0).n_elem - 1; } + mean /= 10; var /= 10; mean3d /= 10; var3d /= 10; - if((mean > 0 && mean < 0.4) && (var > 0 && var < 0.6) && - (mean3d > 0 && mean3d < 0.4) && (var3d >0 && var3d<0.6)) + + if ((mean > 0 && mean < 0.4) && (var > 0 && var < 0.6) && + (mean3d > 0 && mean3d < 0.4) && (var3d > 0 && var3d < 0.6)) + { counter++; + break; + } } BOOST_REQUIRE(counter >= 1); From 5870c80ad8c978c85d56646200738a10048b2f73 Mon Sep 17 00:00:00 2001 From: Marcus Edel Date: Fri, 24 Mar 2017 18:10:08 +0100 Subject: [PATCH 24/24] Fix github listing (looks like github updaed the markdown preprocessor). --- README.md | 25 +++++++++---------------- 1 file changed, 9 insertions(+), 16 deletions(-) diff --git a/README.md b/README.md index a22f3a7e38..4fa6181c73 100644 --- a/README.md +++ b/README.md @@ -21,8 +21,7 @@ a machine learning analog to LAPACK. It aims to implement a wide array of machine learning methods and functions as a "swiss army knife" for machine learning researchers. -0. Contents ------------ +### 0. Contents 1. [Introduction](#1-introduction) 2. [Citation details](#2-citation-details) @@ -32,8 +31,7 @@ learning researchers. 6. [Further documentation](#6-further-documentation) 7. [Bug reporting](#7-bug-reporting) -1. Introduction ---------------- +### 1. Introduction The mlpack website can be found at http://www.mlpack.org and contains numerous tutorials and extensive documentation. This README serves as a guide for what @@ -45,8 +43,7 @@ documentation. The website should be consulted for further information: - [Development Site (Github)](http://www.github.com/mlpack/mlpack/) - [API documentation](http://www.mlpack.org/docs/mlpack-git/doxygen.php) -2. Citation details -------------------- +### 2. Citation details If you use mlpack in your research or software, please cite mlpack using the citation below (given in BiBTeX format): @@ -64,8 +61,7 @@ citation below (given in BiBTeX format): Citations are beneficial for the growth and improvement of mlpack. -3. Dependencies ---------------- +### 3. Dependencies mlpack has the following dependencies: @@ -80,8 +76,7 @@ each of those packages for more information. If you are compiling Armadillo by hand, ensure that LAPACK and BLAS are enabled. -4. Building mlpack from source ------------------------------- +### 4. Building mlpack from source This section discusses how to build mlpack from source. However, mlpack is in the repositories of many Linux distributions and so it may be easier to use the @@ -178,8 +173,7 @@ manually). One way to do this, on Linux, is to ensure that the (or whatever directory `libmlpack.so` is installed in.) -5. Running mlpack programs --------------------------- +### 5. Running mlpack programs After building mlpack, the executables will reside in `build/bin/`. You can call them from there, or you can install the library and (depending on system @@ -211,8 +205,7 @@ unique to `mlpack_knn` but is available in all mlpack programs. Verbose output also gives timing output at the end of the program, which can be very useful. -6. Further documentation ------------------------- +### 6. Further documentation The documentation given here is only a fraction of the available documentation for mlpack. If doxygen is installed, you can type `make doc` to build the @@ -224,8 +217,8 @@ older versions of mlpack: - [Development Site (Github)](https://www.github.com/mlpack/mlpack/) - [API documentation](http://www.mlpack.org/docs/mlpack-git/doxygen.php) -7. Bug reporting ----------------- +### 7. Bug reporting + (see also [mlpack help](http://www.mlpack.org/help.html)) If you find a bug in mlpack or have any problems, numerous routes are available