[mlpack-git] master: Input sample can be represented by more than one slice. (ccc6ff0)

gitdub at mlpack.org gitdub at mlpack.org
Fri Jul 15 13:29:43 EDT 2016


Repository : https://github.com/mlpack/mlpack
On branch  : master
Link       : https://github.com/mlpack/mlpack/compare/81c14d9ec8250f8a2caaf1ac06c4be12fc5fd31f...ccc6ff0c01d670536dca496ebdf74d78497020f6

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

commit ccc6ff0c01d670536dca496ebdf74d78497020f6
Author: Marcus Edel <marcus.edel at fu-berlin.de>
Date:   Fri Jul 15 19:29:20 2016 +0200

    Input sample can be represented by more than one slice.


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

ccc6ff0c01d670536dca496ebdf74d78497020f6
 src/mlpack/methods/ann/cnn.hpp      |  3 +++
 src/mlpack/methods/ann/cnn_impl.hpp | 13 ++++++++-----
 2 files changed, 11 insertions(+), 5 deletions(-)

diff --git a/src/mlpack/methods/ann/cnn.hpp b/src/mlpack/methods/ann/cnn.hpp
index 3df23ac..7ef71ed 100644
--- a/src/mlpack/methods/ann/cnn.hpp
+++ b/src/mlpack/methods/ann/cnn.hpp
@@ -429,6 +429,9 @@ class CNN
 
   //! Locally stored backward error.
   arma::mat error;
+
+  //! Locally stored sample size.
+  size_t sampleSize;
 }; // class CNN
 
 } // namespace ann
diff --git a/src/mlpack/methods/ann/cnn_impl.hpp b/src/mlpack/methods/ann/cnn_impl.hpp
index a6d4e4d..fc66c15 100644
--- a/src/mlpack/methods/ann/cnn_impl.hpp
+++ b/src/mlpack/methods/ann/cnn_impl.hpp
@@ -127,6 +127,7 @@ LayerTypes, OutputLayerType, InitializationRuleType, PerformanceFunction
 >::Train(const arma::cube& predictors, const arma::mat& responses)
 {
   numFunctions = predictors.n_cols;
+  sampleSize = predictors.n_slices / responses.n_cols;
   this->predictors = predictors;
   this->responses = responses;
 
@@ -153,7 +154,8 @@ LayerTypes, OutputLayerType, InitializationRuleType, PerformanceFunction
          const arma::mat& responses,
          OptimizerType<NetworkType>& optimizer)
 {
-  numFunctions = predictors.n_cols;
+  numFunctions = responses.n_cols;
+  sampleSize = predictors.n_slices / responses.n_cols;
   this->predictors = predictors;
   this->responses = responses;
 
@@ -200,15 +202,15 @@ LayerTypes, OutputLayerType, InitializationRuleType, PerformanceFunction
 
   arma::mat responsesTemp;
   ResetParameter(network);
-  Forward(predictors.slices(0, 0), network);
+  Forward(predictors.slices(0, sampleSize - 1), network);
   OutputPrediction(responsesTemp, network);
 
   responses = arma::mat(responsesTemp.n_elem, predictors.n_slices);
   responses.col(0) = responsesTemp.col(0);
 
-  for (size_t i = 1; i < predictors.n_slices; i++)
+  for (size_t i = 1; i < (predictors.n_slices / sampleSize); i++)
   {
-    Forward(predictors.slices(i, i), network);
+    Forward(predictors.slices(i, (i + 1) * sampleSize - 1), network);
 
     responsesTemp = arma::mat(responses.colptr(i), responses.n_rows, 1, false,
         true);
@@ -231,7 +233,7 @@ LayerTypes, OutputLayerType, InitializationRuleType, PerformanceFunction
   this->deterministic = deterministic;
 
   ResetParameter(network);
-  Forward(predictors.slices(i, i), network);
+  Forward(predictors.slices(i, (i + 1) * sampleSize - 1), network);
 
   return OutputError(arma::mat(responses.colptr(i), responses.n_rows, 1, false,
       true), error, network);
@@ -267,6 +269,7 @@ LayerTypes, OutputLayerType, InitializationRuleType, PerformanceFunction
 >::Serialize(Archive& ar, const unsigned int /* version */)
 {
   ar & data::CreateNVP(parameter, "parameter");
+  ar & data::CreateNVP(sampleSize, "sampleSize");
 
   // If we are loading, we need to initialize the weights.
   if (Archive::is_loading::value)




More information about the mlpack-git mailing list