12 #ifndef MLPACK_METHODS_HMM_HMM_UTIL_IMPL_HPP 13 #define MLPACK_METHODS_HMM_HMM_UTIL_IMPL_HPP 27 template<
typename ActionType,
typename ArchiveType,
typename ExtraInfoType>
28 void LoadHMMAndPerformActionHelper(
const std::string& modelFile,
29 ExtraInfoType* x = NULL);
32 template<
typename ActionType,
35 typename ExtraInfoType>
36 void DeserializeHMMAndPerformAction(ArchiveType& ar, ExtraInfoType* x = NULL);
38 template<
typename ActionType,
typename ExtraInfoType>
42 const std::string extension = data::Extension(modelFile);
43 if (extension ==
"xml")
45 LoadHMMAndPerformActionHelper<ActionType, cereal::XMLInputArchive>(
48 else if (extension ==
"bin")
50 LoadHMMAndPerformActionHelper<ActionType, cereal::BinaryInputArchive>(
53 else if (extension ==
"json")
55 LoadHMMAndPerformActionHelper<ActionType, cereal::JSONInputArchive>(
60 Log::Fatal <<
"Unknown extension '" << extension <<
"' for HMM model file " 61 <<
"(known: 'xml', 'json', 'bin')." << std::endl;
65 template<
typename ActionType,
67 typename ExtraInfoType>
68 void LoadHMMAndPerformActionHelper(
const std::string& modelFile,
71 std::ifstream ifs(modelFile);
73 Log::Fatal <<
"Cannot open model file '" << modelFile <<
"' for loading!" 85 case HMMType::DiscreteHMM:
86 DeserializeHMMAndPerformAction<ActionType, ArchiveType,
90 case HMMType::GaussianHMM:
91 DeserializeHMMAndPerformAction<ActionType, ArchiveType,
95 case HMMType::GaussianMixtureModelHMM:
96 DeserializeHMMAndPerformAction<ActionType, ArchiveType,
100 case HMMType::DiagonalGaussianMixtureModelHMM:
101 DeserializeHMMAndPerformAction<ActionType, ArchiveType,
105 Log::Fatal <<
"Unknown HMM type '" << (
unsigned int) type <<
"'!" 110 template<
typename ActionType,
111 typename ArchiveType,
113 typename ExtraInfoType>
114 void DeserializeHMMAndPerformAction(ArchiveType& ar, ExtraInfoType* x)
119 ActionType::Apply(hmm, x);
123 template<
typename ArchiveType,
typename HMMType>
124 void SaveHMMHelper(HMMType& hmm,
const std::string& modelFile);
126 template<
typename HMMType>
129 template<
typename HMMType>
130 void SaveHMM(HMMType& hmm,
const std::string& modelFile)
132 const std::string extension = data::Extension(modelFile);
133 if (extension ==
"xml")
134 SaveHMMHelper<cereal::XMLOutputArchive>(hmm, modelFile);
135 else if (extension ==
"bin")
136 SaveHMMHelper<cereal::BinaryOutputArchive>(hmm, modelFile);
137 else if (extension ==
"json")
138 SaveHMMHelper<cereal::JSONOutputArchive>(hmm, modelFile);
140 Log::Fatal <<
"Unknown extension '" << extension <<
"' for HMM model file." 144 template<
typename ArchiveType,
typename HMMType>
145 void SaveHMMHelper(HMMType& hmm,
const std::string& modelFile)
147 std::ofstream ofs(modelFile);
149 Log::Fatal <<
"Cannot open model file '" << modelFile <<
"' for saving!" 154 char type = GetHMMType<HMMType>();
155 if (type ==
char(-1))
156 Log::Fatal <<
"Unknown HMM type given to SaveHMM()!" << std::endl;
158 ar(CEREAL_NVP(type));
163 template<
typename HMMType>
164 char GetHMMType() {
return char(-1); }
167 char GetHMMType<HMM<distribution::DiscreteDistribution>>()
169 return HMMType::DiscreteHMM;
173 char GetHMMType<HMM<distribution::GaussianDistribution>>()
175 return HMMType::GaussianHMM;
179 char GetHMMType<HMM<gmm::GMM>>()
181 return HMMType::GaussianMixtureModelHMM;
185 char GetHMMType<HMM<gmm::DiagonalGMM>>()
187 return HMMType::DiagonalGaussianMixtureModelHMM;
static MLPACK_EXPORT util::PrefixedOutStream Fatal
Prints fatal messages prefixed with [FATAL], then terminates the program.
Definition: log.hpp:90
Linear algebra utility functions, generally performed on matrices or vectors.
Definition: cv.hpp:1
The core includes that mlpack expects; standard C++ includes and Armadillo.
void LoadHMMAndPerformAction(const std::string &modelFile, ExtraInfoType *x=NULL)
ActionType should implement static void Apply(HMMType&).
Definition: hmm_util_impl.hpp:39
Probability distributions.
Definition: diagonal_gaussian_distribution.hpp:18
A class that represents a Hidden Markov Model with an arbitrary type of emission distribution.
Definition: hmm.hpp:85
void SaveHMM(HMMType &hmm, const std::string &modelFile)
Save an HMM to a file.
Definition: hmm_util_impl.hpp:130