[mlpack-svn] r16139 - mlpack/trunk/src/mlpack/methods/gmm
fastlab-svn at coffeetalk-1.cc.gatech.edu
fastlab-svn at coffeetalk-1.cc.gatech.edu
Tue Jan 14 12:46:13 EST 2014
Author: rcurtin
Date: Tue Jan 14 12:46:13 2014
New Revision: 16139
Log:
When using the constructors that don't specify a model, make sure we create an
actual valid GMM and not just random memory.
Modified:
mlpack/trunk/src/mlpack/methods/gmm/gmm.hpp
mlpack/trunk/src/mlpack/methods/gmm/gmm_impl.hpp
Modified: mlpack/trunk/src/mlpack/methods/gmm/gmm.hpp
==============================================================================
--- mlpack/trunk/src/mlpack/methods/gmm/gmm.hpp (original)
+++ mlpack/trunk/src/mlpack/methods/gmm/gmm.hpp Tue Jan 14 12:46:13 2014
@@ -104,19 +104,12 @@
/**
* Create a GMM with the given number of Gaussians, each of which have the
- * specified dimensionality.
+ * specified dimensionality. The means and covariances will be set to 0.
*
* @param gaussians Number of Gaussians in this GMM.
* @param dimensionality Dimensionality of each Gaussian.
*/
- GMM(const size_t gaussians, const size_t dimensionality) :
- gaussians(gaussians),
- dimensionality(dimensionality),
- means(gaussians, arma::vec(dimensionality)),
- covariances(gaussians, arma::mat(dimensionality, dimensionality)),
- weights(gaussians),
- localFitter(FittingType()),
- fitter(localFitter) { /* Nothing to do. */ }
+ GMM(const size_t gaussians, const size_t dimensionality);
/**
* Create a GMM with the given number of Gaussians, each of which have the
@@ -130,13 +123,7 @@
*/
GMM(const size_t gaussians,
const size_t dimensionality,
- FittingType& fitter) :
- gaussians(gaussians),
- dimensionality(dimensionality),
- means(gaussians, arma::vec(dimensionality)),
- covariances(gaussians, arma::mat(dimensionality, dimensionality)),
- weights(gaussians),
- fitter(fitter) { /* Nothing to do. */ }
+ FittingType& fitter);
/**
* Create a GMM with the given means, covariances, and weights.
Modified: mlpack/trunk/src/mlpack/methods/gmm/gmm_impl.hpp
==============================================================================
--- mlpack/trunk/src/mlpack/methods/gmm/gmm_impl.hpp (original)
+++ mlpack/trunk/src/mlpack/methods/gmm/gmm_impl.hpp Tue Jan 14 12:46:13 2014
@@ -16,6 +16,64 @@
namespace mlpack {
namespace gmm {
+/**
+ * Create a GMM with the given number of Gaussians, each of which have the
+ * specified dimensionality. The means and covariances will be set to 0.
+ *
+ * @param gaussians Number of Gaussians in this GMM.
+ * @param dimensionality Dimensionality of each Gaussian.
+ */
+template<typename FittingType>
+GMM<FittingType>::GMM(const size_t gaussians, const size_t dimensionality) :
+ gaussians(gaussians),
+ dimensionality(dimensionality),
+ means(gaussians, arma::vec(dimensionality)),
+ covariances(gaussians, arma::mat(dimensionality, dimensionality)),
+ weights(gaussians),
+ localFitter(FittingType()),
+ fitter(localFitter)
+{
+ // Clear the memory; set it to 0. Technically this model is still valid, but
+ // only barely.
+ weights.fill(1.0 / gaussians);
+ for (size_t i = 0; i < gaussians; ++i)
+ {
+ means[i].zeros();
+ covariances[i].eye();
+ }
+}
+
+/**
+ * Create a GMM with the given number of Gaussians, each of which have the
+ * specified dimensionality. Also, pass in an initialized FittingType class;
+ * this is useful in cases where the FittingType class needs to store some
+ * state.
+ *
+ * @param gaussians Number of Gaussians in this GMM.
+ * @param dimensionality Dimensionality of each Gaussian.
+ * @param fitter Initialized fitting mechanism.
+ */
+template<typename FittingType>
+GMM<FittingType>::GMM(const size_t gaussians,
+ const size_t dimensionality,
+ FittingType& fitter) :
+ gaussians(gaussians),
+ dimensionality(dimensionality),
+ means(gaussians, arma::vec(dimensionality)),
+ covariances(gaussians, arma::mat(dimensionality, dimensionality)),
+ weights(gaussians),
+ fitter(fitter)
+{
+ // Clear the memory; set it to 0. Technically this model is still valid, but
+ // only barely.
+ weights.fill(1.0 / gaussians);
+ for (size_t i = 0; i < gaussians; ++i)
+ {
+ means[i].zeros();
+ covariances[i].eye();
+ }
+}
+
// Copy constructor.
template<typename FittingType>
template<typename OtherFittingType>
More information about the mlpack-svn
mailing list