[mlpack-svn] r16443 - mlpack/trunk/src/mlpack/methods/sparse_autoencoder

fastlab-svn at coffeetalk-1.cc.gatech.edu fastlab-svn at coffeetalk-1.cc.gatech.edu
Wed Apr 16 15:36:06 EDT 2014


Author: rcurtin
Date: Wed Apr 16 15:36:06 2014
New Revision: 16443

Log:
Change Sigmoid() function to avoid matrix copies via the return value.


Modified:
   mlpack/trunk/src/mlpack/methods/sparse_autoencoder/sparse_autoencoder.hpp
   mlpack/trunk/src/mlpack/methods/sparse_autoencoder/sparse_autoencoder_function.cpp
   mlpack/trunk/src/mlpack/methods/sparse_autoencoder/sparse_autoencoder_function.hpp
   mlpack/trunk/src/mlpack/methods/sparse_autoencoder/sparse_autoencoder_impl.hpp

Modified: mlpack/trunk/src/mlpack/methods/sparse_autoencoder/sparse_autoencoder.hpp
==============================================================================
--- mlpack/trunk/src/mlpack/methods/sparse_autoencoder/sparse_autoencoder.hpp	(original)
+++ mlpack/trunk/src/mlpack/methods/sparse_autoencoder/sparse_autoencoder.hpp	Wed Apr 16 15:36:06 2014
@@ -110,9 +110,9 @@
    *
    * @param x Matrix of real values for which we require the sigmoid activation.
    */
-  arma::mat Sigmoid(const arma::mat& x) const
+  void Sigmoid(const arma::mat& x, arma::mat& output) const
   {
-    return (1.0 / (1 + arma::exp(-x)));
+    output = (1.0 / (1 + arma::exp(-x)));
   }
 
   //! Sets size of the visible layer.

Modified: mlpack/trunk/src/mlpack/methods/sparse_autoencoder/sparse_autoencoder_function.cpp
==============================================================================
--- mlpack/trunk/src/mlpack/methods/sparse_autoencoder/sparse_autoencoder_function.cpp	(original)
+++ mlpack/trunk/src/mlpack/methods/sparse_autoencoder/sparse_autoencoder_function.cpp	Wed Apr 16 15:36:06 2014
@@ -93,12 +93,13 @@
   arma::mat hiddenLayer, outputLayer;
 
   // Compute activations of the hidden and output layers.
-  hiddenLayer = Sigmoid(parameters.submat(0, 0, l1 - 1, l2 - 1) * data +
-      arma::repmat(parameters.submat(0, l2, l1 - 1, l2), 1, data.n_cols));
-
-  outputLayer = Sigmoid(
-      parameters.submat(l1, 0, l3 - 1, l2 - 1).t() * hiddenLayer +
-      arma::repmat(parameters.submat(l3, 0, l3, l2 - 1).t(), 1, data.n_cols));
+  Sigmoid(parameters.submat(0, 0, l1 - 1, l2 - 1) * data +
+      arma::repmat(parameters.submat(0, l2, l1 - 1, l2), 1, data.n_cols),
+      hiddenLayer);
+
+  Sigmoid(parameters.submat(l1, 0, l3 - 1, l2 - 1).t() * hiddenLayer +
+      arma::repmat(parameters.submat(l3, 0, l3, l2 - 1).t(), 1, data.n_cols),
+      outputLayer);
 
   arma::mat rhoCap, diff;
 
@@ -159,12 +160,13 @@
   arma::mat hiddenLayer, outputLayer;
 
   // Compute activations of the hidden and output layers.
-  hiddenLayer = Sigmoid(parameters.submat(0, 0, l1 - 1, l2 - 1) * data +
-      arma::repmat(parameters.submat(0, l2, l1 - 1, l2), 1, data.n_cols));
-
-  outputLayer = Sigmoid(
-      parameters.submat(l1, 0, l3 - 1, l2 - 1).t() * hiddenLayer +
-      arma::repmat(parameters.submat(l3, 0, l3, l2 - 1).t(), 1, data.n_cols));
+  Sigmoid(parameters.submat(0, 0, l1 - 1, l2 - 1) * data +
+      arma::repmat(parameters.submat(0, l2, l1 - 1, l2), 1, data.n_cols),
+      hiddenLayer);
+
+  Sigmoid(parameters.submat(l1, 0, l3 - 1, l2 - 1).t() * hiddenLayer +
+      arma::repmat(parameters.submat(l3, 0, l3, l2 - 1).t(), 1, data.n_cols),
+      outputLayer);
 
   arma::mat rhoCap, diff;
 

Modified: mlpack/trunk/src/mlpack/methods/sparse_autoencoder/sparse_autoencoder_function.hpp
==============================================================================
--- mlpack/trunk/src/mlpack/methods/sparse_autoencoder/sparse_autoencoder_function.hpp	(original)
+++ mlpack/trunk/src/mlpack/methods/sparse_autoencoder/sparse_autoencoder_function.hpp	Wed Apr 16 15:36:06 2014
@@ -71,9 +71,9 @@
    *
    * @param x Matrix of real values for which we require the sigmoid activation.
    */
-  arma::mat Sigmoid(const arma::mat& x) const
+  void Sigmoid(const arma::mat& x, arma::mat& output) const
   {
-    return (1.0 / (1 + arma::exp(-x)));
+    output = (1.0 / (1 + arma::exp(-x)));
   }
 
   //! Return the initial point for the optimization.

Modified: mlpack/trunk/src/mlpack/methods/sparse_autoencoder/sparse_autoencoder_impl.hpp
==============================================================================
--- mlpack/trunk/src/mlpack/methods/sparse_autoencoder/sparse_autoencoder_impl.hpp	(original)
+++ mlpack/trunk/src/mlpack/methods/sparse_autoencoder/sparse_autoencoder_impl.hpp	Wed Apr 16 15:36:06 2014
@@ -66,8 +66,9 @@
   const size_t l1 = hiddenSize;
   const size_t l2 = visibleSize;
 
-  features = Sigmoid(parameters.submat(0, 0, l1 - 1, l2 - 1) * data +
-      arma::repmat(parameters.submat(0, l2, l1 - 1, l2), 1, data.n_cols));
+  Sigmoid(parameters.submat(0, 0, l1 - 1, l2 - 1) * data +
+      arma::repmat(parameters.submat(0, l2, l1 - 1, l2), 1, data.n_cols),
+      features);
 }
 
 }; // namespace nn



More information about the mlpack-svn mailing list