diff --git a/src/mlpack/methods/sparse_autoencoder/sparse_autoencoder.hpp b/src/mlpack/methods/sparse_autoencoder/sparse_autoencoder.hpp index 2baaf94747..1c1f896ba1 100644 --- a/src/mlpack/methods/sparse_autoencoder/sparse_autoencoder.hpp +++ b/src/mlpack/methods/sparse_autoencoder/sparse_autoencoder.hpp @@ -110,9 +110,9 @@ class SparseAutoencoder * * @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. diff --git a/src/mlpack/methods/sparse_autoencoder/sparse_autoencoder_function.cpp b/src/mlpack/methods/sparse_autoencoder/sparse_autoencoder_function.cpp index b7ad71f213..09505ae6fe 100644 --- a/src/mlpack/methods/sparse_autoencoder/sparse_autoencoder_function.cpp +++ b/src/mlpack/methods/sparse_autoencoder/sparse_autoencoder_function.cpp @@ -93,12 +93,13 @@ double SparseAutoencoderFunction::Evaluate(const arma::mat& parameters) const 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)); + Sigmoid(parameters.submat(0, 0, l1 - 1, l2 - 1) * data + + arma::repmat(parameters.submat(0, l2, l1 - 1, l2), 1, data.n_cols), + hiddenLayer); - 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(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 @@ void SparseAutoencoderFunction::Gradient(const arma::mat& parameters, 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)); + Sigmoid(parameters.submat(0, 0, l1 - 1, l2 - 1) * data + + arma::repmat(parameters.submat(0, l2, l1 - 1, l2), 1, data.n_cols), + hiddenLayer); - 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(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; diff --git a/src/mlpack/methods/sparse_autoencoder/sparse_autoencoder_function.hpp b/src/mlpack/methods/sparse_autoencoder/sparse_autoencoder_function.hpp index 7a9b0f4bde..331e34611a 100644 --- a/src/mlpack/methods/sparse_autoencoder/sparse_autoencoder_function.hpp +++ b/src/mlpack/methods/sparse_autoencoder/sparse_autoencoder_function.hpp @@ -71,9 +71,9 @@ class SparseAutoencoderFunction * * @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. diff --git a/src/mlpack/methods/sparse_autoencoder/sparse_autoencoder_impl.hpp b/src/mlpack/methods/sparse_autoencoder/sparse_autoencoder_impl.hpp index 16115da8fb..1d786c4254 100644 --- a/src/mlpack/methods/sparse_autoencoder/sparse_autoencoder_impl.hpp +++ b/src/mlpack/methods/sparse_autoencoder/sparse_autoencoder_impl.hpp @@ -66,8 +66,9 @@ void SparseAutoencoder::GetNewFeatures(arma::mat& data, 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