KSquare Utilities
KKMLL::TrainingProcess2 Class Reference

#include <TrainingProcess2.h>

Public Types

typedef TrainingProcess2TrainingProcess2Ptr
 
enum  WhenToRebuild { WhenToRebuild::AlwaysRebuild, WhenToRebuild::NotUpToDate, WhenToRebuild::NotValid, WhenToRebuild::NeverRebuild }
 

Public Member Functions

 TrainingProcess2 ()
 The default constructor; What will be used when creating an instance while reading in from a XML Stream file. All members will be set to default values. The XMLRead method. More...
 
virtual ~TrainingProcess2 ()
 
void Abort (bool _abort)
 
bool Abort () const
 
const KKB::DateTimeBuildDateTime () const
 
void BuildTrainingProcess (TrainingConfiguration2Const *_config, WhenToRebuild _whenToRebuild, FeatureVectorListPtr _trainingExamples, bool _takeOwnerShipOfTrainingExamples, bool _checkForDuplicates, VolConstBool &_cancelFlag, RunLog &_log)
 Call this method just after you construct a new instance of "TrainingProcess2". More...
 
TrainingConfiguration2ConstConfig ()
 
VectorKKStr ConfigFileFormatErrors () const
 If there is a config file; will return a list of its FormatErrors (). More...
 
const KKStrConfigFileName () const
 
void CreateModelsFromTrainingData (WhenToRebuild whenToRebuild, VolConstBool &cancelFlag, RunLog &log)
 
kkint32 DuplicateCount () const
 
kkint32 DuplicateDataCount () const
 
MLClassListPtr ExtractFullHierachyOfClasses () const
 Extracts the list of classes including ones from Sub-Classifiers. More...
 
bool FeaturesAlreadyNormalized () const
 
void FeaturesAlreadyNormalized (bool _featuresAlreadyNormalized)
 
FactoryFVProducerPtr FvFactoryProducer () const
 
FeatureVectorListPtr Images ()
 
void LoadPrevTrainedOtherwiseRebuild (bool _forceRebuild, bool _checkForDuplicates)
 
kkint32 MemoryConsumedEstimated () const
 
MLClassListPtr MLClasses () const
 
SVMModelPtr Model3 ()
 
KKStr ModelDescription () const
 
Model::ModelTypes ModelType () const
 
KKStr ModelTypeStr () const
 
kkint32 NumOfSupportVectors () const
 
ModelOldSVMPtr OldSVMModel () const
 
ModelParamPtr Parameters () const
 
ClassProbList const * PriorProbability () const
 
virtual void ReadXML (XmlStream &s, XmlTagConstPtr tag, VolConstBool &cancelFlag, RunLog &log)
 
void ReportTraningClassStatistics (std::ostream &report)
 
void SaveTrainingProcess (RunLog &log)
 Saves the built training model into the Save file in Xml Format. More...
 
TrainingProcess2ListPtr SubTrainingProcesses () const
 
void SupportVectorStatistics (kkint32 &numSVs, kkint32 &totalNumSVs)
 
ModelPtr TrainedModel () const
 
TrainingProcess2Ptr TrainingProcessLeft ()
 summary> Returns back pointer to 2nd classifier of Dual Classifier; if not a Dual classifier will return back NULL. More...
 
TrainingProcess2Ptr TrainingProcessRight ()
 
double TrainingTime () const
 
void ValidateConfiguration ()
 
virtual void WriteXML (const KKStr &varName, std::ostream &o) const
 

Static Public Member Functions

static TrainingProcess2Ptr CreateTrainingProcess (TrainingConfiguration2Const *config, bool checkForDuplicates, WhenToRebuild whenToRebuild, bool saveTrainedModel, VolConstBool &cancelFlag, RunLog &log)
 
static TrainingProcess2Ptr CreateTrainingProcessForLevel (TrainingConfiguration2Const *config, kkuint32 level, VolConstBool &cancelFlag, RunLog &log)
 
static TrainingProcess2Ptr CreateTrainingProcessForLevel (const KKStr &configFileName, kkuint32 level, VolConstBool &cancelFlag, RunLog &log)
 
static TrainingProcess2Ptr CreateTrainingProcessFromTrainingExamples (TrainingConfiguration2Const *config, FeatureVectorListPtr trainingExamples, bool takeOwnershipOfTrainingExamples, bool featuresAlreadyNormalized, VolConstBool &cancelFlag, RunLog &log)
 Will Construct an instance using provided list of examples rather than loading from training library. More...
 
static FeatureVectorListPtr ExtractTrainingClassFeatures (TrainingConfiguration2ConstPtr config, KKB::DateTime &latestImageTimeStamp, bool &changesMadeToTrainingLibraries, VolConstBool &cancelFlag, RunLog &log)
 
static TrainingProcess2Ptr LoadExistingTrainingProcess (const KKStr &configRootName, VolConstBool &cancelFlag, RunLog &log)
 Loads an existing TrainingProcess; if one does not exist will return NULL. More...
 

Detailed Description

Definition at line 78 of file TrainingProcess2.h.

Member Typedef Documentation

Member Enumeration Documentation

Enumerator
AlwaysRebuild 
NotUpToDate 
NotValid 
NeverRebuild 

Definition at line 83 of file TrainingProcess2.h.

84  {
85  AlwaysRebuild,
86  NotUpToDate,
87  NotValid,
88  NeverRebuild
89  };

Constructor & Destructor Documentation

TrainingProcess2::TrainingProcess2 ( )

The default constructor; What will be used when creating an instance while reading in from a XML Stream file. All members will be set to default values. The XMLRead method.

Definition at line 405 of file TrainingProcess2.cpp.

References KKB::DateTime::DateTime(), and KKB::KKStr::KKStr().

Referenced by CreateTrainingProcess(), and CreateTrainingProcessForLevel().

405  :
406 
407  abort (false),
408  buildDateTime (DateTime (1900,1,1,0, 0, 0)),
409  config (NULL),
410  configOurs (NULL),
411  configFileName (""),
412  configFileNameSpecified (""),
413  duplicateCount (0),
414  duplicateDataCount (0),
415  featuresAlreadyNormalized (false),
416  fileDesc (NULL),
417  fvFactoryProducer (NULL),
418  mlClasses (NULL),
419  model (NULL),
420  priorProbability (NULL),
421  report (NULL),
422  savedModelName (),
423  subTrainingProcesses (NULL),
424  trainingExamples (NULL),
425  weOwnTrainingExamples (true),
426  weOwnMLClasses (true)
427 {
428 }
TrainingProcess2::~TrainingProcess2 ( )
virtual

Definition at line 434 of file TrainingProcess2.cpp.

435 {
436  cout << "TrainingProcess2::~TrainingProcess2 for Config[" << configFileName << "]" << endl;
437 
438  try
439  {
440  delete model;
441  model = NULL;
442  }
443  catch (...)
444  {
445  cerr << "TrainingProcess2::~TrainingProcess2 ***ERROR*** Exception deleting model." << endl;
446  }
447  model = NULL;
448 
449 
450  delete subTrainingProcesses; subTrainingProcesses = NULL;
451  delete priorProbability; priorProbability = NULL;
452 
453  if (weOwnTrainingExamples)
454  {
455  delete trainingExamples;
456  trainingExamples = NULL;
457  }
458 
459  if (weOwnMLClasses)
460  {
461  delete mlClasses; mlClasses = NULL;
462  }
463 
464  delete configOurs;
465  configOurs = NULL;
466 }
HTMLReport &__cdecl endl(HTMLReport &htmlReport)
Definition: HTMLReport.cpp:240

Member Function Documentation

void KKMLL::TrainingProcess2::Abort ( bool  _abort)
inline

Definition at line 243 of file TrainingProcess2.h.

Referenced by CreateModelsFromTrainingData(), and ReadXML().

243 {abort = _abort;}
bool KKMLL::TrainingProcess2::Abort ( ) const
inline
const KKB::DateTime& KKMLL::TrainingProcess2::BuildDateTime ( ) const
inline

Definition at line 246 of file TrainingProcess2.h.

Referenced by CreateTrainingProcess().

246 {return buildDateTime;}
void TrainingProcess2::BuildTrainingProcess ( TrainingConfiguration2Const _config,
WhenToRebuild  _whenToRebuild,
FeatureVectorListPtr  _trainingExamples,
bool  _takeOwnerShipOfTrainingExamples,
bool  _checkForDuplicates,
VolConstBool _cancelFlag,
RunLog _log 
)

Call this method just after you construct a new instance of "TrainingProcess2".

Parameters
[in]_config
[in]_whenToRebuildUsed for any sub classifiers that this instance of TrainingProcess2 might need to build.
[in]_trainingExamples
[in]_takeOwnerShipOfTrainingExamplesIf true this instance of 'TrainingProcess2' will take ownership of '_trainingExamples' and delete it when done with them.
[in]_checkForDuplicatesIf true will remove duplicate examples from '_trainingExamples'.
[in]_cancelFlag
[in]_log

Definition at line 506 of file TrainingProcess2.cpp.

References Abort(), KKMLL::TrainingConfiguration2::ConfigFileNameSpecified(), CreateModelsFromTrainingData(), KKMLL::TrainingConfiguration2::Duplicate(), KKMLL::TrainingConfiguration2::FvFactoryProducer(), KKB::RunLog::Level(), and KKB::KKStr::operator=().

Referenced by CreateTrainingProcess(), and CreateTrainingProcessForLevel().

514 {
515  if (_cancelFlag)
516  return;
517 
518  _log.Level (20) << "TrainingProcess2 Building Support Vector Machine";
519 
520  if (weOwnTrainingExamples)
521  {
522  delete trainingExamples;
523  trainingExamples = NULL;
524  }
525 
526  configOurs = _config->Duplicate ();
527  config = configOurs;
528 
529  configFileName = config->ConfigFileNameSpecified ();
530 
531  fvFactoryProducer = _config->FvFactoryProducer (_log);
532 
533  trainingExamples = _trainingExamples;
534  weOwnTrainingExamples = _takeOwnerShipOfTrainingExamples;
535 
536  if (_checkForDuplicates)
537  CheckForDuplicates (true, _log);
538 
539  // trainer->ReportTraningClassStatistics (*report);
540  CreateModelsFromTrainingData (_whenToRebuild,
541  _cancelFlag,
542  _log
543  );
544  if (Abort ())
545  {
546  _log.Level (-1) << endl
547  << "TrainingProcess2::BuildTrainingProcess ***ERROR*** Aborted During Model Creation ***" << endl
548  << endl;
549  return;
550  }
551 } /* BuildTrainingProcess */
HTMLReport &__cdecl endl(HTMLReport &htmlReport)
Definition: HTMLReport.cpp:240
RunLog & Level(kkint32 _level)
Definition: RunLog.cpp:220
void CreateModelsFromTrainingData(WhenToRebuild whenToRebuild, VolConstBool &cancelFlag, RunLog &log)
virtual TrainingConfiguration2Ptr Duplicate() const
TrainingConfiguration2Const* KKMLL::TrainingProcess2::Config ( )
inline

Definition at line 247 of file TrainingProcess2.h.

Referenced by KKMLL::Classifier2::Classifier2().

247 {return config;}
VectorKKStr TrainingProcess2::ConfigFileFormatErrors ( ) const

If there is a config file; will return a list of its FormatErrors ().

Definition at line 1113 of file TrainingProcess2.cpp.

References KKB::VectorKKStr::VectorKKStr().

1114 {
1115  if (config)
1116  return config->FormatErrorsWithLineNumbers ();
1117  else
1118  return VectorKKStr ();
1119 } /* ConfigFileFormatErrors */
const KKStr& KKMLL::TrainingProcess2::ConfigFileName ( ) const
inline

Definition at line 248 of file TrainingProcess2.h.

Referenced by KKMLL::ModelDual::Description().

248 {return configFileName;}
void TrainingProcess2::CreateModelsFromTrainingData ( WhenToRebuild  whenToRebuild,
VolConstBool cancelFlag,
RunLog log 
)

< false = DON'T check for duplicates.

Definition at line 938 of file TrainingProcess2.cpp.

References Abort(), KKMLL::Model::CreateAModel(), KKMLL::FactoryFVProducer::FileDesc(), KKMLL::TrainingConfiguration2::FvFactoryProducer(), KKMLL::FeatureVectorList::GetClassDistribution(), KKMLL::Model::MLClassesNewInstance(), KKMLL::TrainingConfiguration2::ModelingMethod(), KKMLL::TrainingConfiguration2::ModelParameters(), KKB::DateTime::operator=(), KKB::osGetLocalDateTime(), KKB::osGetRootName(), KKMLL::Model::TrainModel(), and KKMLL::Model::ValidModel().

Referenced by BuildTrainingProcess().

942 {
943  log.Level (20) << "TrainingProcess2::CreateModelsFromTrainingData Starting" << endl;
944 
945  if (config->ModelParameters () == NULL)
946  {
947  log.Level (-1) << endl
948  << "TrainingProcess2::CreateModelsFromTrainingData ***ERROR***" << endl
949  << endl
950  << " Parameters not specified in configuration file." << endl
951  << endl;
952  Abort (true);
953  return;
954  }
955 
956  if (!fvFactoryProducer)
957  fvFactoryProducer = config->FvFactoryProducer (log);
958 
959  if (!fileDesc)
960  fileDesc = fvFactoryProducer->FileDesc ();
961 
962  delete priorProbability;
963  priorProbability = trainingExamples->GetClassDistribution ();
964 
965  // Will Create the Appropriate Model class given 'config->ModelingMethod ()'.
966  model = Model::CreateAModel (config->ModelingMethod (),
967  osGetRootName (configFileName),
968  *(config->ModelParameters ()),
969  fvFactoryProducer,
970  cancelFlag,
971  log
972  );
973 
974  try
975  {
976  model->TrainModel (trainingExamples,
977  featuresAlreadyNormalized,
978  false, // false = 'model' We are not giving ownership of TrainingExdamples to model.
979  cancelFlag,
980  log
981  );
982  }
983  catch (const KKException& e)
984  {
985  log.Level (-1) << endl << endl
986  << "TrainingProcess2::CreateModelsFromTrainingData ***ERROR*** Exception occurred while running 'Model::TrainModel'." << endl
987  << " Exception[" << e.ToString () << endl
988  << endl;
989  Abort (true);
990  }
991  catch (...)
992  {
993  log.Level (-1) << endl << endl
994  << "TrainingProcess2::CreateModelsFromTrainingData ***ERROR*** Exception occurred while running 'Model::TrainModel'." << endl
995  << endl;
996  Abort (true);
997  }
998 
999  if (!model->ValidModel ())
1000  {
1001  Abort (true);
1002  }
1003 
1004  else if (cancelFlag)
1005  {
1006  Abort (true);
1007  }
1008 
1009  else
1010  {
1011  delete mlClasses;
1012  mlClasses = model->MLClassesNewInstance ();
1013 
1014  // Need to LOad Sub Processors.
1015  LoadSubClassifiers (whenToRebuild,
1016  false, /**< false = DON'T check for duplicates. */
1017  cancelFlag,
1018  log
1019  );
1020  }
1021 
1022  //trainingExamples->Owner (false);
1023  buildDateTime = osGetLocalDateTime ();
1024  log.Level (20) << "TrainingProcess2::CreateModelsFromTrainingData Ending" << endl;
1025 } /* CreateModelsFromTrainingData */
HTMLReport &__cdecl endl(HTMLReport &htmlReport)
Definition: HTMLReport.cpp:240
static ModelPtr CreateAModel(ModelTypes _modelType, const KKStr &_name, const ModelParam &_param, FactoryFVProducerPtr _factoryFVProducer, VolConstBool &_cancelFlag, RunLog &_log)
A factory method that will instantiate the appropriate class of training model based off &#39;_modelType&#39;...
Definition: Model.cpp:287
KKB::DateTime osGetLocalDateTime()
Returned the current local date and time.
ClassProbListPtr GetClassDistribution() const
RunLog & Level(kkint32 _level)
Definition: RunLog.cpp:220
bool ValidModel() const
Definition: Model.h:195
virtual void TrainModel(FeatureVectorListPtr _trainExamples, bool _alreadyNormalized, bool _takeOwnership, VolConstBool &_cancelFlag, RunLog &_log)
Performs operations such as FeatureEncoding, and Normalization. The actual training of models occurs ...
Definition: Model.cpp:467
virtual FileDescPtr FileDesc() const =0
virtual const KKStr & ToString() const
Definition: KKException.cpp:98
KKStr osGetRootName(const KKStr &fullFileName)
MLClassListPtr MLClassesNewInstance() const
Definition: Model.cpp:228
TrainingProcess2Ptr TrainingProcess2::CreateTrainingProcess ( TrainingConfiguration2Const config,
bool  checkForDuplicates,
WhenToRebuild  whenToRebuild,
bool  saveTrainedModel,
VolConstBool cancelFlag,
RunLog log 
)
static

summary>Build a new model from scratch for the specified class level removing duplicate training examples.

remarks> Using the parameter level will construct a classifier that groups classes together by group hierarchy. Underscore characters in the class name will be used to differentiate group levels. Ex: Crustacean_Copepod_Calanoid has three levels of grouping where Crustacean belongs to level 1, Copeod to level 2, and Calanoid to level 3. /remarks> param name="config"> Configuration that will provide parameters such as classes and their related directories where training examples are found and sub-classifiers. /param> param name="level"> The grouping level to build a classifier for. Ex: if level = 2 is specified and referring to the class name "Crustacean_Copepod_Calanoid" above all classes that start with "Crustacean_Copepod</em>" will be combined as one logical class. /param> param name="cancelFlag"> Will monitor if it ever is set to true will stop processing at earliest convenience and return to caller. /param> param name="log"> Logging file.

< true = Take ownership of 'trainingExamples'.

< true = Take ownership of 'trainingExamples'.

Definition at line 91 of file TrainingProcess2.cpp.

References Abort(), AlwaysRebuild, BuildDateTime(), BuildTrainingProcess(), KKB::KKStr::Concat(), KKMLL::TrainingConfiguration2::ConfigRootName(), ExtractTrainingClassFeatures(), KKMLL::TrainingConfiguration2::GetEffectiveConfigFileName(), LoadExistingTrainingProcess(), NeverRebuild, NotValid, KKB::DateTime::operator<(), KKB::osGetFileDateTime(), SaveTrainingProcess(), and TrainingProcess2().

98 {
99  log.Level (10) << "TrainingProcess2::CreateTrainingProcess." << endl;
100 
101  bool weShouldRebuild = false;
102  TrainingProcess2Ptr trainer = NULL;
103 
105  {
106  trainer = LoadExistingTrainingProcess (config->ConfigRootName (), cancelFlag, log);
107  if (!trainer)
108  {
109  log.Level (-1) << endl
110  << "TrainingProcess2::CreateTrainingProcess ***ERROR*** Could not load existing save model." << endl
111  << endl;
112  }
113  else if (trainer->Abort ())
114  {
115  log.Level (-1) << endl
116  << "TrainingProcess2::CreateTrainingProcess ***ERROR*** Existing Save model is Invalid." << endl
117  << endl;
118  delete trainer;
119  trainer = NULL;
120  }
121 
122  return trainer;
123  }
124 
125  FeatureVectorListPtr trainingExamples = NULL;
126  KKStr configRootName = config->ConfigRootName ();
127  KKStr configFileFullName = TrainingConfiguration2::GetEffectiveConfigFileName (configRootName);
128  DateTime configFileTimeStamp = KKB::osGetFileDateTime (configFileFullName);
129  DateTime latestTrainingImageTimeStamp;
130  bool changesMadeToTrainingLibrary = true;
131 
133  {
134  trainingExamples = ExtractTrainingClassFeatures (config, latestTrainingImageTimeStamp, changesMadeToTrainingLibrary, cancelFlag, log);
135  if (!trainingExamples)
136  {
137  log.Level (-1) << endl
138  << "TrainingProcess2::CreateTrainingProcess ***ERROR*** Failed to load training data." << endl
139  << endl;
140  return NULL;
141  }
142 
143  if (cancelFlag)
144  {
145  delete trainingExamples;
146  trainingExamples = NULL;
147  }
148  else
149  {
150  trainer = new TrainingProcess2 ();
151  trainer->BuildTrainingProcess (config,
152  whenToRebuild,
153  trainingExamples,
154  true, /**< true = Take ownership of 'trainingExamples'. */
155  checkForDuplicates,
156  cancelFlag,
157  log
158  );
159  if (saveTrainedModel && (!cancelFlag) && (!trainer->Abort ()))
160  trainer->SaveTrainingProcess (log);
161  }
162 
163  trainingExamples = NULL;
164 
165  return trainer;
166  }
167 
168  trainer = LoadExistingTrainingProcess (config->ConfigRootName (), cancelFlag, log);
169  if ((trainer) && (trainer->Abort ()))
170  {
171  delete trainer;
172  trainer = NULL;
173  }
174 
175  if (trainer && (whenToRebuild == TrainingProcess2::WhenToRebuild::NotValid))
176  {
177  // Model is valid and 'whenToRebuild' specifies to use existing model as long as valid.
178  log.Level (20) << "CreateTrainingProcess Existing model[" << configFileFullName << "] Valid!" << endl;
179  return trainer;
180  }
181 
182  bool rebuildTrainingProcess = false;
183  if (!trainer)
184  rebuildTrainingProcess = true;
185 
186  else if ((trainer->BuildDateTime () < configFileTimeStamp) ||
187  (trainer->BuildDateTime () < latestTrainingImageTimeStamp)
188  )
189  {
190  log.Level (-1) << endl
191  << "TrainingProcess2::CreateTrainingProcess ***WARNING*** Saved model was not up to date; we will rebuild." << endl
192  << endl;
193  rebuildTrainingProcess = true;
194  }
195 
196  if (rebuildTrainingProcess)
197  {
198  delete trainer;
199  trainer = NULL;
200  trainingExamples = ExtractTrainingClassFeatures (config, latestTrainingImageTimeStamp, changesMadeToTrainingLibrary, cancelFlag, log);
201  if (!trainingExamples)
202  {
203  log.Level (-1) << endl
204  << "TrainingProcess2::CreateTrainingProcess ***ERROR*** Failed to load training data." << endl
205  << endl;
206  return NULL;
207  }
208 
209  if (cancelFlag)
210  {
211  log.Level (-1) << "TrainingProcess2::CreateTrainingProcess Canceled !!!" << endl;
212  delete trainingExamples;
213  trainingExamples = NULL;
214  return NULL;
215  }
216 
217  trainer = new TrainingProcess2 ();
218  trainer->BuildTrainingProcess (config,
219  whenToRebuild,
220  trainingExamples,
221  true, /**< true = Take ownership of 'trainingExamples'. */
222  checkForDuplicates,
223  cancelFlag,
224  log
225  );
226  if (saveTrainedModel && (!cancelFlag) && (!trainer->Abort ()))
227  trainer->SaveTrainingProcess (log);
228 
229  // Since 'trainer' now has ownership to 'trainingExamples' we will set 'trainingExamples' to NULL
230  trainingExamples = NULL;
231  return trainer;
232  }
233 
234  else
235  {
236  // The model that we loaded is valid and up-to-date; we can use as is and discard the training data we just loaded.
237  delete trainingExamples;
238  trainingExamples = NULL;
239 
240  log.Level (10) << "TrainingProcess2::CreateTrainingProcess Existing saved model[" << trainer->ConfigFileName () << "]." << endl;
241  return trainer;
242  }
243 } /* CreateTrainingProcess */
HTMLReport &__cdecl endl(HTMLReport &htmlReport)
Definition: HTMLReport.cpp:240
const KKB::DateTime & BuildDateTime() const
RunLog & Level(kkint32 _level)
Definition: RunLog.cpp:220
void BuildTrainingProcess(TrainingConfiguration2Const *_config, WhenToRebuild _whenToRebuild, FeatureVectorListPtr _trainingExamples, bool _takeOwnerShipOfTrainingExamples, bool _checkForDuplicates, VolConstBool &_cancelFlag, RunLog &_log)
Call this method just after you construct a new instance of "TrainingProcess2".
Container class for FeatureVector derived objects.
static TrainingProcess2Ptr LoadExistingTrainingProcess(const KKStr &configRootName, VolConstBool &cancelFlag, RunLog &log)
Loads an existing TrainingProcess; if one does not exist will return NULL.
static KKStr GetEffectiveConfigFileName(const KKStr &configFileName)
Determine the correct configuration file name.
void SaveTrainingProcess(RunLog &log)
Saves the built training model into the Save file in Xml Format.
void Abort(bool _abort)
TrainingProcess2()
The default constructor; What will be used when creating an instance while reading in from a XML Stre...
KKB::DateTime osGetFileDateTime(const KKStr &fileName)
const KKStr & ConfigFileName() const
static FeatureVectorListPtr ExtractTrainingClassFeatures(TrainingConfiguration2ConstPtr config, KKB::DateTime &latestImageTimeStamp, bool &changesMadeToTrainingLibraries, VolConstBool &cancelFlag, RunLog &log)
TrainingProcess2Ptr TrainingProcess2::CreateTrainingProcessForLevel ( TrainingConfiguration2Const config,
kkuint32  level,
VolConstBool cancelFlag,
RunLog log 
)
static

summary> Build a new model from scratch for the specified class level removing duplicate training examples.

remarks> Using the parameter level will construct a classifier that groups classes together by group hierarchy. Underscore characters in the class name will be used to differentiate group levels. Ex: Crustacean_Copepod_Calanoid has three levels of grouping where Crustacean, Copepod, and Calanoid belong to levels 1, 2, 3 respectively. /remarks> param name="configFileName"> Name of Configuration file that is to be used to construct instance of TrainingConfiguration2. Will provide parameters such as classes and their related directories where training examples are found and sub-classifiers. /param> param name="level"> The grouping level to build a classifier for. Ex: if level = 2 is specified and referring to the class name Crustacean_Copepod_Calanoid above all classes that start with Crustacean_Copepod will be combined as one logical class. /param> param name="cancelFlag"> Will monitor if it ever is set to true will stop processing at earliest convenience and return to caller.

param name="log">Logging file.

< true = Take ownership of 'trainingExamples'

Definition at line 248 of file TrainingProcess2.cpp.

References AlwaysRebuild, BuildTrainingProcess(), KKB::KKStr::Concat(), KKMLL::DuplicateImages::DuplicateImages(), KKMLL::TrainingConfiguration2::ExtractClassList(), KKMLL::FeatureVectorList::ExtractExamplesForHierarchyLevel(), ExtractTrainingClassFeatures(), KKMLL::FeatureVectorList::FileDesc(), KKMLL::TrainingConfiguration2::FvFactoryProducer(), KKMLL::TrainingConfiguration2::GenerateAConfiguraionForAHierarchialLevel(), KKMLL::DuplicateImages::PurgeDuplicates(), and TrainingProcess2().

253 {
254  log.Level (20) << "TrainingProcess2::CreateTrainingProcessForLevel" << endl;
255  if (config == NULL)
256  {
257  KKStr errMsg = "CreateTrainingProcessForLevel ***ERROR*** Configuration file was not provided.";
258  log.Level (-1) << endl << errMsg << endl << endl;
259  return NULL;
260  }
261 
262  DateTime latestTrainingImageTimeStamp;
263  bool changesMadeToTrainingLibrary = false;
264  FactoryFVProducerPtr fvFactoryProducer = config->FvFactoryProducer (log);
265 
266  FeatureVectorListPtr trainingExamples
267  = ExtractTrainingClassFeatures (config, latestTrainingImageTimeStamp, changesMadeToTrainingLibrary, cancelFlag, log);
268  if (!trainingExamples)
269  {
270  log.Level (-1) << endl
271  << "TrainingProcess2::CreateTrainingProcessForLevel ***ERROR*** Failed to load training data." << endl
272  << endl;
273  return NULL;
274  }
275 
276 
277  {
278  DuplicateImagesPtr dupDetector = new DuplicateImages (trainingExamples->FileDesc (), log);
279  dupDetector->PurgeDuplicates (trainingExamples, true, NULL);
280  delete dupDetector;
281  dupDetector = NULL;
282  }
283 
284  MLClassListPtr mlClasses = config->ExtractClassList ();
285 
286  {
287  // We need to build data that is specific to the specified _level.
288  FeatureVectorListPtr newExamples = trainingExamples->ExtractExamplesForHierarchyLevel (level);
289  delete trainingExamples;
290  trainingExamples = newExamples;
291  newExamples = NULL;
292  }
293 
294  TrainingConfiguration2Ptr levelSpecificConfig = config->GenerateAConfiguraionForAHierarchialLevel (level, log);
295 
296  TrainingProcess2Ptr trainer = new TrainingProcess2 ();
297  trainer->BuildTrainingProcess (levelSpecificConfig,
299  trainingExamples,
300  true, /**< true = Take ownership of 'trainingExamples' */
301  false,
302  cancelFlag,
303  log
304  );
305 
306  delete levelSpecificConfig;
307  levelSpecificConfig = NULL;
308  trainingExamples = NULL;
309 
310  return trainer;
311 } /* CreateTrainingProcessForLevel */
HTMLReport &__cdecl endl(HTMLReport &htmlReport)
Definition: HTMLReport.cpp:240
const FileDescPtr FileDesc() const
RunLog & Level(kkint32 _level)
Definition: RunLog.cpp:220
void BuildTrainingProcess(TrainingConfiguration2Const *_config, WhenToRebuild _whenToRebuild, FeatureVectorListPtr _trainingExamples, bool _takeOwnerShipOfTrainingExamples, bool _checkForDuplicates, VolConstBool &_cancelFlag, RunLog &_log)
Call this method just after you construct a new instance of "TrainingProcess2".
Container class for FeatureVector derived objects.
TrainingProcess2()
The default constructor; What will be used when creating an instance while reading in from a XML Stre...
void PurgeDuplicates(FeatureVectorListPtr examples, bool allowDupsInSameClass, std::ostream *report)
Delete duplicate examples from FeatureVectorList structure provided in constructor.
FeatureVectorListPtr ExtractExamplesForHierarchyLevel(kkuint32 level)
Will create a list of FeatureVectors where the class assignment will reflect the specified Hierarchy ...
Detects duplicate images in a given FeaureVectorList objects.
Responsible for creating a FeatureFectorProducer instance.
Maintains a list of MLClass instances.
Definition: MLClass.h:233
static FeatureVectorListPtr ExtractTrainingClassFeatures(TrainingConfiguration2ConstPtr config, KKB::DateTime &latestImageTimeStamp, bool &changesMadeToTrainingLibraries, VolConstBool &cancelFlag, RunLog &log)
TrainingProcess2Ptr TrainingProcess2::CreateTrainingProcessForLevel ( const KKStr configFileName,
kkuint32  level,
VolConstBool cancelFlag,
RunLog log 
)
static

Definition at line 316 of file TrainingProcess2.cpp.

References KKMLL::TrainingConfiguration2::Load(), and KKMLL::TrainingConfiguration2::TrainingConfiguration2().

321 {
322  log.Level (20) << "TrainingProcess2::CreateTrainingProcessForLevel configFileName: " << configFileName << endl;
323 
324  TrainingProcess2Ptr trainer = NULL;
325 
327  config->Load (configFileName, true, log);
328  if (!config->FormatGood ())
329  {
330  log.Level (-1) << endl
331  << "TrainingProcess2::CreateTrainingProcessForLevel ***ERROR*** Config File[" << configFileName << "] Format is invalid." << endl
332  << endl;
333  }
334  else
335  {
336  trainer = CreateTrainingProcessForLevel (config, level, cancelFlag, log);
337  }
338  delete config;
339  config = NULL;
340 
341  return trainer;
342 } /* CreateTrainingProcessForLevel */
virtual void Load(const KKStr &_configFileName, bool _validateDirectories, RunLog &log)
HTMLReport &__cdecl endl(HTMLReport &htmlReport)
Definition: HTMLReport.cpp:240
RunLog & Level(kkint32 _level)
Definition: RunLog.cpp:220
static TrainingProcess2Ptr CreateTrainingProcessForLevel(TrainingConfiguration2Const *config, kkuint32 level, VolConstBool &cancelFlag, RunLog &log)
bool FormatGood() const
Definition: Configuration.h:64
TrainingProcess2Ptr TrainingProcess2::CreateTrainingProcessFromTrainingExamples ( TrainingConfiguration2Const config,
FeatureVectorListPtr  trainingExamples,
bool  takeOwnershipOfTrainingExamples,
bool  featuresAlreadyNormalized,
VolConstBool cancelFlag,
RunLog log 
)
static

Will Construct an instance using provided list of examples rather than loading from training library.

Training examples are typically loaded from a training library as specified in the TrainingConfiguration2 structure. Rather than loading and/or computing feature data it will utilize the feature-vectors provided by the 'trainingExamples' parameter.

Parameters
[in]configA configuration that is already loaded in memory.
[in]trainingExamplesTraining data to train classifier with.
[in]takeOwnershipOfTrainingExamplesIf set to true then we will take ownership of the feature-vectors in 'trainingExamples'. This means we are free to modify or delete them as needed. If this flag is set to false will make duplicate copy of the feature-vectors if it is required to modify them; such as normalize them.
[in]featuresAlreadyNormalizedIf set to true will assume that all features in the training data are normalized.
[in]cancelFlagWill monitor if it ever is set to true will stop processing at earliest convenience and return to caller.
[in]logLogging file.

Definition at line 352 of file TrainingProcess2.cpp.

Referenced by KKMLL::ModelDual::TrainModel().

359 {
360  log.Level (20) << "TrainingProcess2::TrainingProcess2" << endl;
361 
362  if (!config)
363  {
364  log.Level (-1) << endl
365  << "TrainingProcess2::CreateTrainingProcessFromTrainingExamples ***ERROR*** No Configuration File Specified." << endl
366  << endl;
367  return NULL;
368  }
369 
370  else if (!config->FormatGood ())
371  {
372  log.Level (-1) << endl
373  << "TrainingProcess2::CreateTrainingProcessFromTrainingExamples ***ERROR*** Format error in Configuration File[" << config->FileName () << "]." << endl
374  << endl;
375  return NULL;
376  }
377 
378  else
379  {
380  TrainingProcess2Ptr trainer = new TrainingProcess2 ();
381  trainer->FeaturesAlreadyNormalized (featuresAlreadyNormalized);
382  trainer->BuildTrainingProcess (config,
384  trainingExamples,
385  takeOwnershipOfTrainingExamples,
386  true,
387  cancelFlag,
388  log
389  );
390  return trainer;
391  }
392 } /* CreateTrainingProcessFromTrainingExamples */
HTMLReport &__cdecl endl(HTMLReport &htmlReport)
Definition: HTMLReport.cpp:240
RunLog & Level(kkint32 _level)
Definition: RunLog.cpp:220
void BuildTrainingProcess(TrainingConfiguration2Const *_config, WhenToRebuild _whenToRebuild, FeatureVectorListPtr _trainingExamples, bool _takeOwnerShipOfTrainingExamples, bool _checkForDuplicates, VolConstBool &_cancelFlag, RunLog &_log)
Call this method just after you construct a new instance of "TrainingProcess2".
TrainingProcess2()
The default constructor; What will be used when creating an instance while reading in from a XML Stre...
bool FeaturesAlreadyNormalized() const
kkint32 KKMLL::TrainingProcess2::DuplicateCount ( ) const
inline

Definition at line 250 of file TrainingProcess2.h.

250 {return duplicateCount;}
kkint32 KKMLL::TrainingProcess2::DuplicateDataCount ( ) const
inline

Definition at line 251 of file TrainingProcess2.h.

251 {return duplicateDataCount;}
MLClassListPtr TrainingProcess2::ExtractFullHierachyOfClasses ( ) const

Extracts the list of classes including ones from Sub-Classifiers.

Definition at line 1095 of file TrainingProcess2.cpp.

References KKMLL::TrainingConfiguration2::ExtractFullHierachyOfClasses(), and KKMLL::MLClassList::MLClassList().

1096 {
1097  if (config)
1098  return config->ExtractFullHierachyOfClasses ();
1099 
1100  else if (mlClasses)
1101  return new MLClassList (*mlClasses);
1102 
1103  else
1104  return NULL;
1105 }
Maintains a list of MLClass instances.
Definition: MLClass.h:233
FeatureVectorListPtr TrainingProcess2::ExtractTrainingClassFeatures ( TrainingConfiguration2ConstPtr  config,
KKB::DateTime latestImageTimeStamp,
bool &  changesMadeToTrainingLibraries,
VolConstBool cancelFlag,
RunLog log 
)
static

Definition at line 756 of file TrainingProcess2.cpp.

References KKMLL::FeatureVectorList::AddQueue(), KKMLL::TrainingConfiguration2::FvFactoryProducer(), KKMLL::FactoryFVProducer::ManufacturFeatureVectorList(), KKMLL::TrainingConfiguration2::MlClasses(), KKMLL::MLClassList::MLClassList(), KKMLL::TrainingConfiguration2::NoiseTrainingClass(), KKB::DateTime::operator=(), KKB::DateTime::operator>(), and KKMLL::TrainingConfiguration2::TrainingClasses().

Referenced by CreateTrainingProcess(), and CreateTrainingProcessForLevel().

762 {
763  log.Level (10) << "TrainingProcess2::ExtractTrainingClassFeatures - Starting." << endl;
764 
765  changesMadeToTrainingLibraries = false;
766  bool abort = false;
767 
768  FactoryFVProducerPtr fvFactoryProdcer = config->FvFactoryProducer (log);
769 
770  FeatureVectorListPtr trainingExamples = fvFactoryProdcer->ManufacturFeatureVectorList (true, log);
771 
772  //****************************************************************************
773  // Make sure that there are no existing *.data files that we are going to use.
774  // We need to do this in a separate pass because more than one entry may refer
775  // to the same Class and hence the same *.data file.
776 
777 
778  //***********************************************************
779  // We will first extract the Raw features from each Class
780 
781  const TrainingClassList& trainingClasses = config->TrainingClasses ();
782 
783  bool weOwnMlClasses = false;
784  MLClassListPtr mlClasses = config->MlClasses ();
785  if (!mlClasses)
786  {
787  mlClasses = new MLClassList ();
788  weOwnMlClasses = true;
789  }
790 
791 
792  DateTime latestTimeStamp;
793  bool changesMadeToThisTrainingClass = false;
794 
795  for (auto tcIDX: trainingClasses)
796  {
797  if (cancelFlag || abort)
798  break;
799 
800  const TrainingClassPtr trainingClass = tcIDX;
801 
802  log.Level (20) << "TrainingProcess2::ExtractTrainingClassFeatures Starting on Class[" << trainingClass->Name () << "]." << endl;
803 
804  FeatureVectorListPtr examplesThisClass
805  = ExtractFeatures (config, *mlClasses, trainingClass, latestTimeStamp, changesMadeToThisTrainingClass, cancelFlag, log);
806 
807  if (latestTimeStamp > latestImageTimeStamp)
808  latestImageTimeStamp = latestTimeStamp;
809 
810  if (changesMadeToThisTrainingClass)
811  changesMadeToTrainingLibraries = true;
812 
813  if (!examplesThisClass)
814  {
815  abort = true;
816  log.Level (-1) << "TrainingProcess2::ExtractTrainingClassFeatures ***ERROR*** No examples returned by 'ExtractTrainingClassFeatures': " << trainingClass->Name () << endl;
817  }
818  else
819  {
820  trainingExamples->AddQueue (*examplesThisClass);
821  examplesThisClass->Owner (false);
822  delete examplesThisClass;
823  examplesThisClass = NULL;
824  }
825  }
826 
827  // DONE Extracting Raw features from All classes.
828  if ((!abort) && (!cancelFlag))
829  {
830  const TrainingClassPtr noiseTC = config->NoiseTrainingClass ();
831  if (noiseTC)
832  {
833  FeatureVectorListPtr examplesThisClass =
834  ExtractFeatures (config,
835  *mlClasses,
836  noiseTC,
837  latestTimeStamp,
838  changesMadeToThisTrainingClass,
839  cancelFlag,
840  log
841  );
842  if (latestTimeStamp > latestImageTimeStamp)
843  latestImageTimeStamp = latestTimeStamp;
844 
845  if (changesMadeToThisTrainingClass)
846  changesMadeToTrainingLibraries = true;
847  if (!examplesThisClass)
848  {
849  log.Level (-1) << endl
850  << "TrainingProcess2::ExtractTrainingClassFeatures ***ERROR*** Loading NoiseClass[" << noiseTC->Name () << "]." << endl
851  << endl;
852  abort = true;
853  }
854  else
855  {
856  trainingExamples->AddQueue (*examplesThisClass);
857  examplesThisClass->Owner (false);
858  delete examplesThisClass;
859  examplesThisClass = NULL;
860  }
861  }
862 
863  trainingExamples->RandomizeOrder ();
864 
865  if (weOwnMlClasses)
866  {
867  delete mlClasses;
868  mlClasses = NULL;
869  }
870  }
871 
872  if (abort)
873  {
874  delete trainingExamples;
875  trainingExamples = NULL;
876  log.Level (10) << "TrainingProcess2::ExtractTrainingClassFeatures Loading of training data failed." << endl;
877  }
878  else
879  {
880  log.Level (20) << "TrainingProcess2::ExtractTrainingClassFeatures Exiting" << endl;
881  }
882  return trainingExamples;
883 } /* ExtractTrainingClassFeatures */
HTMLReport &__cdecl endl(HTMLReport &htmlReport)
Definition: HTMLReport.cpp:240
void AddQueue(const FeatureVectorList &examplesToAdd)
Add the contents of &#39;examplesToAdd&#39; to the end of this list.
RunLog & Level(kkint32 _level)
Definition: RunLog.cpp:220
bool Owner() const
Definition: KKQueue.h:305
Container class for FeatureVector derived objects.
virtual FeatureVectorListPtr ManufacturFeatureVectorList(bool owner, RunLog &runLog) const
Manufactures a instance of a derived &#39;FeatureVectorList&#39; class that is appropriate for containing ins...
const KKStr & Name() const
Specify where training examples and other related data for a MLClass that is needed to train a classi...
Definition: TrainingClass.h:38
void RandomizeOrder()
Randomizes the order of the vector.
Definition: KKQueue.h:469
Responsible for creating a FeatureFectorProducer instance.
Maintains a list of MLClass instances.
Definition: MLClass.h:233
bool KKMLL::TrainingProcess2::FeaturesAlreadyNormalized ( ) const
inline

Definition at line 252 of file TrainingProcess2.h.

Referenced by KKMLL::Classifier2::Classifier2().

252 {return featuresAlreadyNormalized;}
void KKMLL::TrainingProcess2::FeaturesAlreadyNormalized ( bool  _featuresAlreadyNormalized)
inline

Definition at line 270 of file TrainingProcess2.h.

270 {featuresAlreadyNormalized = _featuresAlreadyNormalized;}
FactoryFVProducerPtr KKMLL::TrainingProcess2::FvFactoryProducer ( ) const
inline

Definition at line 253 of file TrainingProcess2.h.

253 {return fvFactoryProducer;}
FeatureVectorListPtr KKMLL::TrainingProcess2::Images ( )
inline

Definition at line 254 of file TrainingProcess2.h.

254 {return trainingExamples;}
TrainingProcess2Ptr TrainingProcess2::LoadExistingTrainingProcess ( const KKStr configRootName,
VolConstBool cancelFlag,
RunLog log 
)
static

Loads an existing TrainingProcess; if one does not exist will return NULL.

Parameters
[in]configRootNameRoot name of training model;
[in]cancelFlagWill monitor if it ever is set to true will stop processing at earliest convenience and return to caller.
[in]logLogging file.

Definition at line 52 of file TrainingProcess2.cpp.

References KKB::KKStr::Concat(), KKMLL::TrainingConfiguration2::GetEffectiveConfigFileName(), KKB::XmlStream::GetNextToken(), KKB::KKStr::operator+(), KKB::osFileExists(), KKB::osRemoveExtension(), and KKB::XmlStream::XmlStream().

Referenced by CreateTrainingProcess().

56 {
57  TrainingProcess2Ptr trainer = NULL;
58 
59  KKStr configFileFullName = TrainingConfiguration2::GetEffectiveConfigFileName (configRootName);
60 
61  KKStr savedModelName = osRemoveExtension (configFileFullName) + ".Save";
62  if (!osFileExists (savedModelName))
63  {
64  log.Level (-1) << endl
65  << "TrainingProcess2::LoadExistingTrainingProcess ***ERROR*** SaveFile[" << savedModelName << "] does not exist." << endl
66  << endl;
67  return NULL;
68  }
69 
70  XmlStreamPtr stream = new XmlStream (savedModelName, log);
71  XmlTokenPtr t = stream->GetNextToken (cancelFlag, log);
72  while (t && (typeid (*t) != typeid (XmlElementTrainingProcess2)))
73  {
74  delete t;
75  t = stream->GetNextToken (cancelFlag, log);
76  }
77 
78  if (t)
79  trainer = dynamic_cast<XmlElementTrainingProcess2Ptr> (t)->TakeOwnership ();
80 
81  delete stream; stream = NULL;
82  delete t; t = NULL;
83 
84  return trainer;
85 } /* LoadExistingTrainingProcess */
HTMLReport &__cdecl endl(HTMLReport &htmlReport)
Definition: HTMLReport.cpp:240
KKStr osRemoveExtension(const KKStr &_fullFileName)
RunLog & Level(kkint32 _level)
Definition: RunLog.cpp:220
Manages the reading and writing of objects in a simple XML format. For a class to be supported by Xml...
Definition: XmlStream.h:46
static KKStr GetEffectiveConfigFileName(const KKStr &configFileName)
Determine the correct configuration file name.
bool osFileExists(const KKStr &_fileName)
Definition: OSservices.cpp:568
virtual XmlTokenPtr GetNextToken(VolConstBool &cancelFlag, RunLog &log)
Definition: XmlStream.cpp:116
void KKMLL::TrainingProcess2::LoadPrevTrainedOtherwiseRebuild ( bool  _forceRebuild,
bool  _checkForDuplicates 
)
kkint32 TrainingProcess2::MemoryConsumedEstimated ( ) const

Definition at line 471 of file TrainingProcess2.cpp.

References KKMLL::ClassProbList::MemoryConsumedEstimated(), KKMLL::Model::MemoryConsumedEstimated(), KKMLL::MLClassList::MemoryConsumedEstimated(), KKB::KKStr::MemoryConsumedEstimated(), KKMLL::TrainingProcess2List::MemoryConsumedEstimated(), and KKMLL::FeatureVectorList::MemoryConsumedEstimated().

Referenced by KKMLL::ModelDual::MemoryConsumedEstimated(), and KKMLL::TrainingProcess2List::MemoryConsumedEstimated().

472 {
473  kkint32 memoryConsumedEstimated = sizeof (TrainingProcess2)
474  + configFileName.MemoryConsumedEstimated ()
475  + configFileNameSpecified.MemoryConsumedEstimated ()
476  + savedModelName.MemoryConsumedEstimated ();
477 
478  if (configOurs)
479  memoryConsumedEstimated += configOurs->MemoryConsumedEstimated ();
480 
481  if (weOwnTrainingExamples && (trainingExamples != NULL))
482  memoryConsumedEstimated += trainingExamples->MemoryConsumedEstimated ();
483 
484  if ((mlClasses != NULL) && weOwnMLClasses)
485  memoryConsumedEstimated += mlClasses->MemoryConsumedEstimated ();
486 
487  if (model)
488  memoryConsumedEstimated += model->MemoryConsumedEstimated ();
489 
490  if (priorProbability)
491  memoryConsumedEstimated += priorProbability->MemoryConsumedEstimated ();
492 
493  if (subTrainingProcesses)
494  memoryConsumedEstimated += subTrainingProcesses->MemoryConsumedEstimated ();
495 
496  return memoryConsumedEstimated;
497 } /* MemoryConsumedEstimated */
kkint32 MemoryConsumedEstimated() const
Definition: KKStr.cpp:766
__int32 kkint32
Definition: KKBaseTypes.h:88
virtual kkint32 MemoryConsumedEstimated() const
kkint32 MemoryConsumedEstimated() const
Definition: ClassProb.cpp:68
kkint32 MemoryConsumedEstimated() const
virtual kkint32 MemoryConsumedEstimated() const
kkint32 MemoryConsumedEstimated() const
Definition: MLClass.cpp:616
virtual kkint32 MemoryConsumedEstimated() const
Definition: Model.cpp:208
TrainingProcess2()
The default constructor; What will be used when creating an instance while reading in from a XML Stre...
MLClassListPtr KKMLL::TrainingProcess2::MLClasses ( ) const
inline

Definition at line 255 of file TrainingProcess2.h.

Referenced by KKMLL::Classifier2::Classifier2().

255 {return mlClasses;}
SVMModelPtr TrainingProcess2::Model3 ( )

Definition at line 620 of file TrainingProcess2.cpp.

References OldSVMModel(), and KKMLL::ModelOldSVM::SvmModel().

621 {
622  ModelOldSVMPtr oldSvmModel = OldSVMModel ();
623  if (oldSvmModel)
624  return oldSvmModel->SvmModel ();
625  else
626  return NULL;
627 }
SVMModelPtr SvmModel() const
Definition: ModelOldSVM.h:92
A specialization of &#39;Model&#39;; meant to Wrap the original version of &#39;SvmModel&#39; class. It will allow us to use the original implementation using version 2.39 of LibSVM.
Definition: ModelOldSVM.h:34
ModelOldSVMPtr OldSVMModel() const
KKStr TrainingProcess2::ModelDescription ( ) const

Definition at line 590 of file TrainingProcess2.cpp.

References KKMLL::Model::Description().

Referenced by KKMLL::ModelDual::ProbabilitiesByClassDual().

591 {
592  if (model)
593  return model->Description ();
594  else
595  return "No Model";
596 }
virtual KKStr Description() const
Definition: Model.cpp:248
Model::ModelTypes TrainingProcess2::ModelType ( ) const

Definition at line 600 of file TrainingProcess2.cpp.

References KKMLL::Model::ModelType(), and KKMLL::Model::Null.

601 {
602  if (model)
603  return model->ModelType ();
604  else
606 }
virtual ModelTypes ModelType() const =0
KKStr TrainingProcess2::ModelTypeStr ( ) const

Definition at line 610 of file TrainingProcess2.cpp.

References KKMLL::Model::ModelTypeStr().

Referenced by KKMLL::ModelDual::Description().

611 {
612  if (model)
613  return model->ModelTypeStr ();
614  else
615  return "No_Model";
616 }
virtual KKStr ModelTypeStr() const
Definition: Model.h:176
kkint32 TrainingProcess2::NumOfSupportVectors ( ) const

Definition at line 1044 of file TrainingProcess2.cpp.

References KKMLL::ModelOldSVM::NumOfSupportVectors(), and OldSVMModel().

Referenced by KKMLL::ModelDual::NumOfSupportVectors().

1045 {
1046  ModelOldSVMPtr oldSvmModel = OldSVMModel ();
1047  if (oldSvmModel)
1048  return oldSvmModel->NumOfSupportVectors ();
1049  else
1050  return 0;
1051 }
A specialization of &#39;Model&#39;; meant to Wrap the original version of &#39;SvmModel&#39; class. It will allow us to use the original implementation using version 2.39 of LibSVM.
Definition: ModelOldSVM.h:34
kkint32 NumOfSupportVectors() const
ModelOldSVMPtr OldSVMModel() const
ModelOldSVMPtr TrainingProcess2::OldSVMModel ( ) const

Definition at line 580 of file TrainingProcess2.cpp.

References KKMLL::Model::ModelType(), and KKMLL::Model::OldSVM.

Referenced by Model3(), NumOfSupportVectors(), and SupportVectorStatistics().

581 {
582  if (model->ModelType () == Model::ModelTypes::OldSVM)
583  return dynamic_cast<ModelOldSVMPtr> (model);
584  else
585  return NULL;
586 }
virtual ModelTypes ModelType() const =0
ModelParamPtr TrainingProcess2::Parameters ( ) const

Definition at line 1033 of file TrainingProcess2.cpp.

References KKMLL::Model::Param().

1034 {
1035  if (!model)
1036  return NULL;
1037  else
1038  return model->Param ();
1039 } /* Parameters */
ModelParamPtr Param() const
Definition: Model.h:183
ClassProbList const* KKMLL::TrainingProcess2::PriorProbability ( ) const
inline

Definition at line 262 of file TrainingProcess2.h.

Referenced by KKMLL::Classifier2::PriorProbability().

262 {return priorProbability;}
void TrainingProcess2::ReadXML ( XmlStream s,
XmlTagConstPtr  tag,
VolConstBool cancelFlag,
RunLog log 
)
virtual

Definition at line 1237 of file TrainingProcess2.cpp.

References Abort(), KKB::KKStr::Concat(), KKB::KKStr::EqualIgnoreCase(), KKMLL::FactoryFVProducer::FileDesc(), KKMLL::TrainingConfiguration2::FvFactoryProducer(), KKB::XmlStream::GetNextToken(), KKMLL::FactoryFVProducer::LookUpFactory(), KKMLL::Model::MLClasses(), NotValid, KKMLL::MLClassList::operator!=(), KKB::DateTime::operator=(), KKB::XmlElement::SectionName(), KKMLL::TrainingConfiguration2::SubClassifiers(), KKMLL::XmlElementModel::TakeOwnership(), KKMLL::XmlElementMLClassNameList::TakeOwnership(), KKB::XmlElement::ToBool(), KKB::XmlToken::tokElement, KKB::XmlToken::TokenType(), KKB::XmlElement::ToKKStr(), KKMLL::Model::ValidModel(), KKB::XmlElementDateTime::Value(), and KKB::XmlElement::VarName().

1242 {
1243  log.Level (20) << "TrainingProcess2::ReadXML" << endl;
1244 
1245  VectorKKStr* subProcessorsNameList = NULL;
1246 
1247  delete configOurs;
1248  configOurs = NULL;
1249 
1250  config = NULL;
1251  fileDesc = NULL;
1252  fvFactoryProducer = NULL;
1253 
1254  if (weOwnMLClasses)
1255  {
1256  delete mlClasses;
1257  mlClasses = NULL;
1258  }
1259 
1260  delete model; model = NULL;
1261  delete priorProbability; priorProbability = NULL;
1262 
1263  delete subTrainingProcesses;
1264  subTrainingProcesses = NULL;
1265 
1266  if (weOwnTrainingExamples)
1267  delete trainingExamples;
1268  trainingExamples = NULL;
1269 
1270  bool errorsFound = false;
1271 
1272  XmlTokenPtr t = s.GetNextToken (cancelFlag, log);
1273  while (t)
1274  {
1275  if (t->TokenType () == XmlToken::TokenTypes::tokElement)
1276  {
1277  XmlElementPtr e = dynamic_cast<XmlElementPtr> (t);
1278  const KKStr& varName = e->VarName ();
1279  const KKStr& sectionName = e->SectionName ();
1280 
1281  if (varName.EqualIgnoreCase ("BuildDateTime") && (typeid (*e) == typeid (XmlElementDateTime)))
1282  buildDateTime = dynamic_cast<XmlElementDateTimePtr> (e)->Value ();
1283 
1284  else if (varName.EqualIgnoreCase ("ConfigFileNameSpecified") && (typeid (*e) == typeid (XmlElementKKStr)))
1285  configFileNameSpecified = *(dynamic_cast<XmlElementKKStrPtr> (e)->Value ());
1286 
1287  else if (varName.EqualIgnoreCase ("ConfigFileName") && (typeid (*e) == typeid (XmlElementKKStr)))
1288  configFileName = *(dynamic_cast<XmlElementKKStrPtr> (e)->Value ());
1289 
1290  else if (varName.EqualIgnoreCase ("Config") )
1291  {
1292  delete configOurs;
1293  XmlElementTrainingConfiguration2Ptr xmlConfigElement = dynamic_cast<XmlElementTrainingConfiguration2Ptr> (e);
1294  if (xmlConfigElement)
1295  {
1296  configOurs = xmlConfigElement->TakeOwnership ();
1297  config = configOurs;
1298  if ((config != NULL) && (fvFactoryProducer == NULL))
1299  {
1300  fvFactoryProducer = config->FvFactoryProducer (log);
1301  fileDesc = fvFactoryProducer->FileDesc ();
1302  }
1303  }
1304  }
1305 
1306  else if (varName.EqualIgnoreCase ("FvFactoryProducer"))
1307  {
1308  fvFactoryProducer = FactoryFVProducer::LookUpFactory (e->ToKKStr ());
1309  if (fvFactoryProducer)
1310  fileDesc = fvFactoryProducer->FileDesc ();
1311  }
1312 
1313  else if (varName.EqualIgnoreCase ("FeaturesAlreadyNormalized"))
1314  featuresAlreadyNormalized = e->ToBool ();
1315 
1316  else if (varName.EqualIgnoreCase ("MlClasses") && (typeid (*e) == typeid (XmlElementMLClassNameList)))
1317  {
1318  if (weOwnMLClasses)
1319  delete mlClasses;
1320  mlClasses = dynamic_cast<XmlElementMLClassNameListPtr> (e)->TakeOwnership ();
1321  weOwnMLClasses= true;
1322  }
1323 
1324  else if (varName.EqualIgnoreCase ("Model"))
1325  {
1326  delete model;
1327  XmlElementModelPtr xmlElementModel = dynamic_cast<XmlElementModelPtr> (e);
1328  if (xmlElementModel)
1329  {
1330  model = xmlElementModel->TakeOwnership ();
1331  if (!model->ValidModel ())
1332  {
1333  errorsFound = true;
1334  log.Level (-1) << endl
1335  << "TrainingProcess2::ReadXML ***ERROR*** Loaded Model is Invalid" << endl
1336  << endl;
1337  }
1338  }
1339  }
1340 
1341  else if (varName.EqualIgnoreCase ("PriorProbability") && (typeid (*e) == typeid (XmlElementClassProbList)))
1342  {
1343  delete priorProbability;
1344  priorProbability = dynamic_cast<XmlElementClassProbListPtr> (e)->TakeOwnership ();
1345  }
1346 
1347  else if (varName.EqualIgnoreCase ("SubTrainingProcesses") && (typeid (*e) == typeid (XmlElementVectorKKStr)))
1348  {
1349  delete subProcessorsNameList;
1350  subProcessorsNameList = dynamic_cast<XmlElementVectorKKStrPtr> (e)->TakeOwnership ();
1351  }
1352  else
1353  {
1354  log.Level (-1) << endl
1355  << "TrainingProcess2::ReadXML ***ERROR*** Unrecognized Element Section: " << e->NameTagStr () << endl
1356  << endl;
1357  }
1358  }
1359  delete t;
1360  if (cancelFlag)
1361  t = NULL;
1362  else
1363  t = s.GetNextToken (cancelFlag, log);
1364  }
1365  if (!cancelFlag)
1366  {
1367  if (!model)
1368  {
1369  log.Level (-1) << endl
1370  << "TrainingProcess2::ReadXML ***ERROR*** 'model' was not defined." << endl
1371  << endl;
1372  errorsFound = true;
1373  }
1374 
1375  if (mlClasses == NULL)
1376  {
1377  log.Level (-1) << endl
1378  << "TrainingProcess2::ReadXML ***ERROR*** 'mlClasses' was not defined." << endl
1379  << endl;
1380  errorsFound = true;
1381  }
1382 
1383  if (model && (model->MLClasses ()) && mlClasses)
1384  {
1385  if (*mlClasses != *(model->MLClasses ()))
1386  {
1387  log.Level (-1) << endl
1388  << "TrainingProcess2::ReadXML ***ERROR*** TrainingProcess2::mlClasses does not agree with model->MlClasses" << endl
1389  << endl;
1390  errorsFound = true;
1391  }
1392  }
1393 
1394  if (!errorsFound)
1395  {
1396  if (config)
1397  {
1398  if (config->SubClassifiers () != NULL)
1399  {
1400  LoadSubClassifiers (WhenToRebuild::NotValid,
1401  true, // CheckForDuplicates
1402  cancelFlag,
1403  log
1404  );
1405  }
1406  }
1407  }
1408 
1409  delete subProcessorsNameList;
1410  subProcessorsNameList = NULL;
1411  }
1412 
1413  if (errorsFound || cancelFlag)
1414  Abort (true);
1415 
1416  log.Level (20) << "TrainingProcess2::ReadXML Exiting!" << endl;
1417 } /* ReadXML */
HTMLReport &__cdecl endl(HTMLReport &htmlReport)
Definition: HTMLReport.cpp:240
ModelPtr TakeOwnership()
Definition: Model.h:470
virtual KKStr ToKKStr() const
Definition: XmlStream.h:314
static FactoryFVProducerPtr LookUpFactory(const KKStr &name)
Returns pointer to existing instance of &#39;FactoryFVProducer&#39; that was previously registered with &#39;name...
bool EqualIgnoreCase(const KKStr &s2) const
Definition: KKStr.cpp:1250
RunLog & Level(kkint32 _level)
Definition: RunLog.cpp:220
virtual bool ToBool() const
Definition: XmlStream.h:313
XmlElementTemplate< ClassProbList > XmlElementClassProbList
Definition: ClassProb.h:146
The base class to be used for the manufacturing if "Model" derived classes.
Definition: Model.h:452
virtual const KKStr & VarName() const
Definition: XmlStream.cpp:794
bool ValidModel() const
Definition: Model.h:195
MLClassListPtr MLClasses() const
Definition: Model.h:170
virtual const KKStr & SectionName() const
Definition: XmlStream.cpp:785
KKStr NameTagStr() const
Definition: XmlStream.cpp:775
XmlElementTemplate< VectorKKStr > XmlElementVectorKKStr
Definition: XmlStream.h:674
virtual TokenTypes TokenType()=0
virtual XmlTokenPtr GetNextToken(VolConstBool &cancelFlag, RunLog &log)
Definition: XmlStream.cpp:116
Will only write the ClassName rather than complete MLClass instances.
Definition: MLClass.h:580
virtual FileDescPtr FileDesc() const =0
void TrainingProcess2::ReportTraningClassStatistics ( std::ostream &  report)

Definition at line 889 of file TrainingProcess2.cpp.

References KKMLL::FeatureVectorList::PrintClassStatistics().

890 {
891  report << endl
892  << "Training Class Statistics" << endl
893  << endl;
894  trainingExamples->PrintClassStatistics (report);
895 } /* ReportTraningClassStatistics */
HTMLReport &__cdecl endl(HTMLReport &htmlReport)
Definition: HTMLReport.cpp:240
void PrintClassStatistics(std::ostream &o) const
void TrainingProcess2::SaveTrainingProcess ( RunLog log)

Saves the built training model into the Save file in Xml Format.

Definition at line 556 of file TrainingProcess2.cpp.

References KKMLL::TrainingConfiguration2::ConfigFileNameSpecified(), KKMLL::TrainingConfiguration2::GetEffectiveConfigFileName(), KKB::KKStr::operator+(), KKB::KKStr::operator=(), and KKB::osRemoveExtension().

Referenced by CreateTrainingProcess().

557 {
558  configFileName = TrainingConfiguration2::GetEffectiveConfigFileName (config->ConfigFileNameSpecified ());
559  savedModelName = osRemoveExtension (configFileName) + ".Save";
560  log.Level (20) << "TrainingProcess2::SaveTrainingProcess Saving trained model: " << savedModelName << endl;
561 
562  ofstream f (savedModelName.Str ());
563  if (!f.is_open ())
564  {
565  log.Level (-1) << endl
566  << "TrainingProcess2::SaveTrainingProcess ***ERROR*** Could not open SavedModelName[" << savedModelName << "]." << endl
567  << endl;
568  return;
569  }
570 
571  this->WriteXML ("TrainingProcess2", f);
572 
573  f.close ();
574 } /* SaveTrainingProcess */
HTMLReport &__cdecl endl(HTMLReport &htmlReport)
Definition: HTMLReport.cpp:240
KKStr osRemoveExtension(const KKStr &_fullFileName)
RunLog & Level(kkint32 _level)
Definition: RunLog.cpp:220
virtual void WriteXML(const KKStr &varName, std::ostream &o) const
static KKStr GetEffectiveConfigFileName(const KKStr &configFileName)
Determine the correct configuration file name.
TrainingProcess2ListPtr KKMLL::TrainingProcess2::SubTrainingProcesses ( ) const
inline

Definition at line 264 of file TrainingProcess2.h.

264 {return subTrainingProcesses;}
void TrainingProcess2::SupportVectorStatistics ( kkint32 numSVs,
kkint32 totalNumSVs 
)

summary> Returns back pointer to 1st classifier of Dual Classifier; if not a Dual classifier will return back NULL. Keep in mind that you will not own this classifier and that it can be deleted at any time. /summary>

Definition at line 1055 of file TrainingProcess2.cpp.

References OldSVMModel(), and KKMLL::ModelOldSVM::SupportVectorStatistics().

1058 {
1059  numSVs = 0;
1060  totalNumSVs = 0;
1061  ModelOldSVMPtr oldSvmModel = OldSVMModel ();
1062  if (oldSvmModel)
1063  oldSvmModel->SupportVectorStatistics (numSVs, totalNumSVs);
1064 }
void SupportVectorStatistics(kkint32 &numSVs, kkint32 &totalNumSVs)
A specialization of &#39;Model&#39;; meant to Wrap the original version of &#39;SvmModel&#39; class. It will allow us to use the original implementation using version 2.39 of LibSVM.
Definition: ModelOldSVM.h:34
ModelOldSVMPtr OldSVMModel() const
ModelPtr KKMLL::TrainingProcess2::TrainedModel ( ) const
inline

Definition at line 265 of file TrainingProcess2.h.

Referenced by KKMLL::Classifier2::Classifier2().

265 {return model;}
TrainingProcess2Ptr TrainingProcess2::TrainingProcessLeft ( )

summary> Returns back pointer to 2nd classifier of Dual Classifier; if not a Dual classifier will return back NULL.

Definition at line 1069 of file TrainingProcess2.cpp.

References KKMLL::Model::Dual, KKMLL::Model::ModelType(), and KKMLL::ModelDual::Trainer1().

1070 {
1071  if ((!model) || (model->ModelType () != Model::ModelTypes::Dual))
1072  return NULL;
1073  return dynamic_cast<ModelDualPtr>(model)->Trainer1 ();
1074 }
Will implement the Dual Classifier Model.
Definition: ModelDual.h:66
virtual ModelTypes ModelType() const =0
TrainingProcess2Ptr TrainingProcess2::TrainingProcessRight ( )

Definition at line 1078 of file TrainingProcess2.cpp.

References KKMLL::Model::Dual, KKMLL::Model::ModelType(), and KKMLL::ModelDual::Trainer2().

1079 {
1080  if ((!model) || (model->ModelType () != Model::ModelTypes::Dual))
1081  return NULL;
1082  return dynamic_cast<ModelDualPtr>(model)->Trainer2 ();
1083 }
Will implement the Dual Classifier Model.
Definition: ModelDual.h:66
virtual ModelTypes ModelType() const =0
double TrainingProcess2::TrainingTime ( ) const

Definition at line 1084 of file TrainingProcess2.cpp.

References KKMLL::Model::TrainingTime().

1085 {
1086  if (model)
1087  return model->TrainingTime();
1088  else
1089  return 0.0;
1090 }
double TrainingTime() const
Definition: Model.h:191
void KKMLL::TrainingProcess2::ValidateConfiguration ( )
void TrainingProcess2::WriteXML ( const KKStr varName,
std::ostream &  o 
) const
virtual

Definition at line 1185 of file TrainingProcess2.cpp.

References KKB::XmlTag::AddAtribute(), KKB::KKStr::Empty(), KKMLL::FactoryFVProducer::Name(), KKB::XmlTag::tagEnd, KKB::XmlTag::tagStart, KKMLL::ClassProbList::WriteXML(), KKB::XmlTag::WriteXML(), KKMLL::TrainingConfiguration2::WriteXML(), KKMLL::Model::WriteXML(), KKB::XmlElementBool::WriteXML(), KKB::XmlElementDateTime::WriteXML(), KKB::KKStr::WriteXML(), KKMLL::XmlElementMLClassNameList::WriteXML(), and KKB::XmlTag::XmlTag().

Referenced by KKMLL::ModelDual::WriteXML().

1188 {
1189  XmlTag startTag ("TrainingProcess2", XmlTag::TagTypes::tagStart);
1190  if (!varName.Empty ())
1191  startTag.AddAtribute ("VarName", varName);
1192  startTag.WriteXML (o);
1193  o << endl;
1194 
1195  XmlElementDateTime::WriteXML (buildDateTime, "BuildDateTime", o);
1196 
1197  configFileNameSpecified.WriteXML ("ConfigFileNameSpecified", o);
1198  configFileName.WriteXML ("ConfigFileName", o);
1199 
1200  if (config)
1201  config->WriteXML ("Config", o);
1202 
1203  XmlElementBool::WriteXML (featuresAlreadyNormalized, "FeaturesAlreadyNormalized", o);
1204  if (fvFactoryProducer)
1205  fvFactoryProducer->Name ().WriteXML ("FvFactoryProducer", o);
1206 
1207  if (mlClasses)
1208  XmlElementMLClassNameList::WriteXML (*mlClasses, "MLClasses", o);
1209 
1210  if (model)
1211  model->WriteXML ("Model", o);
1212 
1213  if (priorProbability)
1214  priorProbability->WriteXML ("PriorProbability", o);
1215 
1216  if (subTrainingProcesses)
1217  {
1218  VectorKKStr subProcessorsNameList;
1219  for (auto idx: *subTrainingProcesses)
1220  {
1221  subProcessorsNameList.push_back (osGetRootName (idx->ConfigFileName ()));
1222  }
1223 
1224  XmlElementVectorKKStr::WriteXML (subProcessorsNameList, "SubTrainingProcesses", o);
1225  }
1226 
1227 
1228  XmlTag endTag ("TrainingProcess2", XmlTag::TagTypes::tagEnd);
1229  endTag.WriteXML (o);
1230  o << endl;
1231 } /* WriteXML */
HTMLReport &__cdecl endl(HTMLReport &htmlReport)
Definition: HTMLReport.cpp:240
virtual void WriteXML(const KKStr &varName, std::ostream &o) const =0
static void WriteXML(const MLClassList &mlClassList, const KKStr &varName, std::ostream &o)
Definition: MLClass.cpp:1499
void WriteXML(const KKStr &varName, std::ostream &o) const
Definition: ClassProb.cpp:400
bool Empty() const
Definition: KKStr.h:241
const KKStr & Name() const
void WriteXML(const KKStr &varName, std::ostream &o) const
Definition: KKStr.cpp:4420
KKStr osGetRootName(const KKStr &fullFileName)

The documentation for this class was generated from the following files: