26 RegisterFeatureExtractionModule< RBMQuantizer > RBMQuantizer::registerModule(
"RBMQuantizer");
30 this->numClusters = numClusters;
31 classType =
"RBMQuantizer";
32 featureExtractionType = classType;
33 debugLog.setProceedingText(
"[DEBUG RBMQuantizer]");
34 errorLog.setProceedingText(
"[ERROR RBMQuantizer]");
35 warningLog.setProceedingText(
"[WARNING RBMQuantizer]");
40 classType =
"RBMQuantizer";
41 featureExtractionType = classType;
42 debugLog.setProceedingText(
"[DEBUG RBMQuantizer]");
43 errorLog.setProceedingText(
"[ERROR RBMQuantizer]");
44 warningLog.setProceedingText(
"[WARNING RBMQuantizer]");
55 this->numClusters = rhs.numClusters;
57 this->quantizationDistances = rhs.quantizationDistances;
67 if( featureExtraction == NULL )
return false;
77 errorLog <<
"clone(FeatureExtraction *featureExtraction) - FeatureExtraction Types Do Not Match!" << endl;
97 std::fill(quantizationDistances.begin(),quantizationDistances.end(),0);
109 quantizationDistances.clear();
117 file.open(filename.c_str(), std::ios::out);
131 file.open(filename.c_str(), std::ios::in);
145 if( !file.is_open() ){
146 errorLog <<
"saveModelToFile(fstream &file) - The file is not open!" << endl;
151 file <<
"RBM_QUANTIZER_FILE_V1.0" << endl;
155 errorLog <<
"saveFeatureExtractionSettingsToFile(fstream &file) - Failed to save base feature extraction settings to file!" << endl;
159 file <<
"QuantizerTrained: " << trained << endl;
160 file <<
"NumClusters: " << numClusters << endl;
164 errorLog <<
"saveModelToFile(fstream &file) - Failed to save RBM settings to file!" << endl;
177 if( !file.is_open() ){
178 errorLog <<
"loadModelFromFile(fstream &file) - The file is not open!" << endl;
186 if( word !=
"RBM_QUANTIZER_FILE_V1.0" ){
187 errorLog <<
"loadModelFromFile(fstream &file) - Invalid file format!" << endl;
193 errorLog <<
"loadFeatureExtractionSettingsFromFile(fstream &file) - Failed to load base feature extraction settings from file!" << endl;
198 if( word !=
"QuantizerTrained:" ){
199 errorLog <<
"loadModelFromFile(fstream &file) - Failed to load QuantizerTrained!" << endl;
205 if( word !=
"NumClusters:" ){
206 errorLog <<
"loadModelFromFile(fstream &file) - Failed to load NumClusters!" << endl;
213 errorLog <<
"loadModelFromFile(fstream &file) - Failed to load SelfOrganizingMap settings from file!" << endl;
217 featureDataReady =
false;
218 quantizationDistances.resize(numClusters,0);
250 errorLog <<
"train_(MatrixDouble &trainingData) - Failed to train quantizer, the training data is empty!" << endl;
255 rbm.setNumHiddenUnits( numClusters );
261 if( !rbm.
train_( trainingData ) ){
262 errorLog <<
"train_(MatrixDouble &trainingData) - Failed to train quantizer!" << endl;
269 numInputDimensions = trainingData.
getNumCols();
270 numOutputDimensions = 1;
271 featureVector.resize(numOutputDimensions,0);
272 quantizationDistances.resize(numClusters,0);
278 return quantize( VectorDouble(1,inputValue) );
284 errorLog <<
"quantize(const VectorDouble &inputVector) - The quantizer model has not been trained!" << endl;
288 if( inputVector.size() != numInputDimensions ){
289 errorLog <<
"quantize(const VectorDouble &inputVector) - The size of the inputVector (" << inputVector.size() <<
") does not match that of the filter (" << numInputDimensions <<
")!" << endl;
293 if( !rbm.
predict( inputVector ) ){
294 errorLog <<
"quantize(const VectorDouble &inputVector) - Failed to quantize input!" << endl;
298 quantizationDistances = rbm.getOutputData();
301 UINT quantizedValue = 0;
303 for(UINT k=0; k<numClusters; k++){
304 if( quantizationDistances[k] > maxValue ){
305 maxValue = quantizationDistances[k];
310 featureVector[0] = quantizedValue;
311 featureDataReady =
true;
313 return quantizedValue;
325 return (trained ? static_cast<UINT>(featureVector[0]) : 0);
329 return quantizationDistances;
338 this->numClusters = numClusters;
virtual bool train_(MatrixDouble &data)
RBMQuantizer & operator=(const RBMQuantizer &rhs)
bool setMaxNumEpochs(const UINT maxNumEpochs)
bool getQuantizerTrained() const
unsigned int getNumCols() const
UINT getQuantizedValue() const
bool setMinChange(const double minChange)
virtual bool loadModelFromFile(string filename)
BernoulliRBM getBernoulliRBM() const
virtual bool predict(VectorDouble inputVector)
MatrixDouble getDataAsMatrixDouble() const
virtual bool saveModelToFile(string filename) const
The SOMQuantizer module quantizes the N-dimensional input vector to a 1-dimensional discrete value...
MatrixDouble getDataAsMatrixDouble() const
virtual bool deepCopyFrom(const FeatureExtraction *featureExtraction)
MatrixDouble getDataAsMatrixDouble() const
virtual bool saveModelToFile(fstream &file) const
unsigned int getNumRows() const
VectorDouble getQuantizationDistances() const
RBMQuantizer(const UINT numClusters=10)
virtual bool loadModelFromFile(fstream &file)
virtual bool computeFeatures(const VectorDouble &inputVector)
UINT quantize(const double inputValue)
bool setLearningRate(double learningRate)
UINT getNumClusters() const
bool train_(ClassificationData &trainingData)
bool setNumClusters(const UINT numClusters)
bool setMinNumEpochs(const UINT minNumEpochs)
MatrixDouble getDataAsMatrixDouble() const