[mlpack-git] master: 1 : change ColumnsToBlocks from function to class(place in core/math) 2 : make NormalizeColByMax as public function(old name is MaximizeHiddenInputs) (662d770)
gitdub at big.cc.gt.atl.ga.us
gitdub at big.cc.gt.atl.ga.us
Mon Nov 30 10:40:30 EST 2015
Repository : https://github.com/mlpack/mlpack
On branch : master
Link : https://github.com/mlpack/mlpack/compare/5aaf0e441dd64a5de9a0210aa7a837eecf162d12...e4519fc42a2a340cf0387ab082bf49b9715c871b
>---------------------------------------------------------------
commit 662d77029dae2f47c9c68dbc81f8d92d65b6e76f
Author: stereomatchingkiss <stereomatchingkiss at gmail.com>
Date: Thu Nov 12 15:53:05 2015 +0800
1 : change ColumnsToBlocks from function to class(place in core/math)
2 : make NormalizeColByMax as public function(old name is MaximizeHiddenInputs)
>---------------------------------------------------------------
662d77029dae2f47c9c68dbc81f8d92d65b6e76f
.../methods/sparse_autoencoder/maximal_inputs.cpp | 96 +++-------------------
.../methods/sparse_autoencoder/maximal_inputs.hpp | 44 +++-------
2 files changed, 23 insertions(+), 117 deletions(-)
diff --git a/src/mlpack/methods/sparse_autoencoder/maximal_inputs.cpp b/src/mlpack/methods/sparse_autoencoder/maximal_inputs.cpp
index 624d834..0d12309 100644
--- a/src/mlpack/methods/sparse_autoencoder/maximal_inputs.cpp
+++ b/src/mlpack/methods/sparse_autoencoder/maximal_inputs.cpp
@@ -3,37 +3,21 @@
namespace mlpack {
namespace nn {
-namespace {
-
-std::pair<arma::uword, arma::uword> GetSize(arma::mat const &input)
+void MaximalInputs(const arma::mat ¶meters, arma::mat &output)
{
- arma::uword rows = 0, cols = 0;
- if(std::pow(std::floor(std::sqrt(input.n_cols)), 2) != input.n_cols)
- {
- cols = static_cast<arma::uword>(std::ceil(std::sqrt(input.n_cols)));
- while(input.n_cols % cols != 0 && cols < 1.2*std::sqrt(input.n_cols))
- {
- ++cols;
- }
- rows = static_cast<arma::uword>
- (std::ceil(input.n_cols/static_cast<double>(cols)));
- }
- else
- {
- cols = static_cast<arma::uword>(std::sqrt(input.n_cols));
- rows = cols;
- }
+ arma::mat paramTemp(parameters.submat(0, 0, (parameters.n_rows-1)/2 - 1,
+ parameters.n_cols - 2).t());
+ double const mean = arma::mean(arma::mean(paramTemp));
+ paramTemp -= mean;
- return {rows, cols};
+ NormalizeColByMax(paramTemp, output);
}
-void MaximizeHiddenUnit(arma::uword rows, arma::uword cols,
- const arma::mat &input,
- arma::mat &output)
+void NormalizeColByMax(const arma::mat &input,
+ arma::mat &output)
{
- const arma::uword size = rows * cols;
- output.set_size(input.n_rows, size);
- for(arma::uword i = 0; i != size; ++i)
+ output.set_size(input.n_rows, input.n_cols);
+ for(arma::uword i = 0; i != input.n_cols; ++i)
{
const double max = arma::max(arma::abs(input.col(i)));
if (max != 0.0)
@@ -47,65 +31,5 @@ void MaximizeHiddenUnit(arma::uword rows, arma::uword cols,
}
}
-}
-
-
-
-std::pair<arma::uword, arma::uword> MaximalInputs(const arma::mat ¶meters, arma::mat &output)
-{
- arma::mat paramTemp(parameters.submat(0, 0, (parameters.n_rows-1)/2 - 1,
- parameters.n_cols - 2).t());
- double const mean = arma::mean(arma::mean(paramTemp));
- paramTemp -= mean;
-
- const auto Size = GetSize(paramTemp);
- MaximizeHiddenUnit(Size.first, Size.second, paramTemp, output);
-
- return Size;
-}
-
-void ColumnsToBlocks(const arma::mat &maximalInputs,
- arma::mat &outputs, arma::uword rows, arma::uword cols,
- bool scale, double minRange,
- double maxRange)
-{
- if(rows * cols != maximalInputs.n_cols)
- {
- throw std::range_error("rows * cols != maximalInputs.n_cols");
- }
-
- arma::uword const squareRows = static_cast<arma::uword>(std::sqrt(maximalInputs.n_rows));
- arma::uword const buf = 1;
-
- arma::uword const offset = squareRows+buf;
- outputs.ones(buf+rows*(offset),
- buf+cols*(offset));
- outputs *= -1;
-
- arma::uword k = 0;
- for(arma::uword i = 0; i != rows; ++i) {
- for(arma::uword j = 0; j != cols; ++j) {
- // Now, copy the elements of the row to the output submatrix.
- const arma::uword minRow = buf + i * offset;
- const arma::uword minCol = buf + j * offset;
- const arma::uword maxRow = i * offset + squareRows;
- const arma::uword maxCol = j * offset + squareRows;
-
- outputs.submat(minRow, minCol, maxRow, maxCol) =
- arma::reshape(maximalInputs.col(k++), squareRows, squareRows);
- }
- }
-
- if(scale)
- {
- const double max = outputs.max();
- const double min = outputs.min();
- if((max - min) != 0)
- {
- outputs = (outputs - min) / (max - min) * (maxRange - minRange) + minRange;
- }
- }
-}
-
} // namespace nn
} // namespace mlpack
diff --git a/src/mlpack/methods/sparse_autoencoder/maximal_inputs.hpp b/src/mlpack/methods/sparse_autoencoder/maximal_inputs.hpp
index 0a6bc94..bbc1a96 100644
--- a/src/mlpack/methods/sparse_autoencoder/maximal_inputs.hpp
+++ b/src/mlpack/methods/sparse_autoencoder/maximal_inputs.hpp
@@ -13,7 +13,6 @@ namespace nn {
* http://deeplearning.stanford.edu/wiki/index.php/Exercise:Sparse_Autoencoder
* @param params The parameters want to maximize
* @param output Parameters after maximize
- * @return Suggestion rows and cols for the function "ColumnsToBlocks"
* @pre 1 : The layout of the parameters should be same as following
* // vSize 1
* // | | |
@@ -40,45 +39,28 @@ namespace nn {
* SparseAutoencoder<L_BFGS> encoder2(optimizer);
*
* arma::mat maximalInput; //store the features learned by sparse autoencoder
- * const auto Size = mlpack::nn::MaximalInputs(encoder2.Parameters(), maximalInput);
+ * mlpack::nn::MaximalInputs(encoder2.Parameters(), maximalInput);
*
* arma::mat outputs;
* const bool scale = true;
- * //put the maximalInput of each col into rows * cols(Size.first * Size.second) blocks,
- * //rows * cols must same as maximalInput.n_cols.If you are training a bunch of images,
- * //this function could help you visualize your trained results
- * mlpack::nn::ColumnsToBlocks(maximalInput, outputs, Size.first, Size.second, scale);
+ *
+ * ColumnsToBlocks ctb(5,5);
+ * arma::mat output;
+ * ctb.Transform(maximalInput, output);
+ * //you can save the output as a pgm, this may help you visualize the training results
+ * output.save(fileName, arma::pgm_binary);
*
* @endcode
*/
-std::pair<arma::uword, arma::uword> MaximalInputs(const arma::mat ¶meters, arma::mat &output);
+void MaximalInputs(const arma::mat ¶meters, arma::mat &output);
/**
- * Transform the output of "MaximalInputs" to blocks, if your training samples are images,
- * this function could help you visualize your training results
- * @param maximalInputs Parameters after maximize by "MaximalInputs", each col assiociate to one sample
- * @param output Maximal inputs regrouped to blocks
- * @param rows number of blocks per cols
- * @param cols number of blocks per rows
- * @param scale False, the output will not be scaled and vice versa
- * @param minRange minimum range of the output
- * @param maxRange maximum range of the output
- * @code
- * arma::mat maximalInput; //store the features learned by sparse autoencoder
- * const auto Size = mlpack::nn::MaximalInputs(encoder2.Parameters(), maximalInput);
- *
- * arma::mat outputs;
- * const bool scale = true;
- * //put the maximalInput of each col into rows * cols(Size.first * Size.second) blocks,
- * //rows * cols must same as maximalInput.n_cols.If you are training a bunch of images,
- * //this function could help you visualize your trained results
- * mlpack::nn::ColumnsToBlocks(maximalInput, outputs, Size.first, Size.second, scale);
- * @endcode
+ * Normalize the cols with its maximum value if it is not zero
+ * @param input the input data want to normalize
+ * @param output inputs after normalize
*/
-void ColumnsToBlocks(const arma::mat &maximalInputs,
- arma::mat &outputs, arma::uword rows, arma::uword cols,
- bool scale = false,
- double minRange = 0, double maxRange = 255);
+void NormalizeColByMax(const arma::mat &input,
+ arma::mat &output);
} // namespace nn
} // namespace mlpack
More information about the mlpack-git
mailing list