Home || Visual Search || Applications || Architecture || Important Messages || OGL || Src

int Impala::Application::TrainModel ( Training::Factory *  factory,
bool  distKernel 
)

Definition at line 23 of file mainTrainModel.cpp.

References Impala::Util::PropertySet::Add(), Impala::Core::Training::AveragePrecision::Compute(), Impala::Core::Training::AveragePrecision::ComputeReversed(), Impala::Util::PropertySet::GetInt(), Impala::Core::Training::Factory::GetModelLocator(), Impala::Core::Training::Factory::GetProperties(), ILOG_ERROR, ILOG_VAR, Impala::Core::Training::Factory::MakeAnnotation(), Impala::Core::Training::Factory::MakeClassifier(), Impala::Core::Training::Factory::MakeConceptList(), Impala::Core::Training::Factory::MakeDataSrc(), Impala::Core::Training::Classifier::Predict(), Impala::Util::Mpi::SelectWorkLoadInPlace(), Impala::Persistency::ModelLocator::SetConcept(), Impala::Util::PropertySet::Size(), and Impala::Core::Training::Classifier::Train().

Referenced by mainTrainModel().

00024 {
00025     ILOG_VAR(Impala.Application.TrainModel);
00026     std::vector<String> conceptList = factory->MakeConceptList();
00027     if (!distKernel)
00028         Util::Mpi::SelectWorkLoadInPlace(&conceptList);
00029     for (int i=0 ; i<conceptList.size(); i++)
00030     {
00031         String concept = conceptList[i];
00032         ModelLocator modelLoc = factory->GetModelLocator();
00033 
00034         if (SvmRepository().Exists(modelLoc))
00035         {
00036             ILOG_WARNING_NODE("cannot create model for " << concept <<
00037                               "; skipping concept");
00038             continue;
00039         }
00040         ILOG_INFO_NODE("concept " << concept);
00041 
00042         // read params
00043         modelLoc.SetConcept(concept);
00044         Util::PropertySet* params = BestFileRepository().Get(modelLoc);
00045         params->Add("probability", 1);
00046         int cache = factory->GetProperties()->GetInt("cache");
00047         params->Add("cache", cache);
00048         ILOG_INFO_NODE(*params);
00049         if (params->Size() == 0)
00050         {
00051             ILOG_WARNING_NODE("no best file found for " << concept <<
00052                               "; skipping concept");
00053             continue;
00054         }
00055 
00056         // load annotation
00057         Table::AnnotationTable* annotation = factory->MakeAnnotation(concept);
00058         if (annotation == 0)
00059         {
00060             ILOG_WARNING_NODE("no annotation found for " << concept << 
00061                               "; skipping concept");
00062             continue;
00063         }
00064         annotation->Sort();
00065 
00066         // compute model
00067         TrainDataSrc* src = factory->MakeDataSrc(annotation);
00068         Classifier* classifier = factory->MakeClassifier("svm");
00069         classifier->Train(params, src);
00070         Svm* svm = static_cast<Svm*>(classifier);
00071         if (svm)
00072             SvmRepository().Add(modelLoc, svm);
00073         else
00074             ILOG_ERROR("Rogue classifier");
00075 
00076         // score on self
00077         Table::ScoreTable* ranking = classifier->Predict(src);
00078         Training::AveragePrecision ap(annotation);
00079         double score = ap.Compute(ranking);
00080         double scoreRev = ap.ComputeReversed(ranking);
00081         if (score < scoreRev)
00082         {
00083             ILOG_ERROR_NODE("reversed ranking score (" << scoreRev <<
00084                             ") > normal ranking score (" << score <<
00085                             ") for " << concept << " => logic error in svm" <<
00086                             " (try setting C=1 in .best file)");
00087         }
00088         delete ranking;
00089         ILOG_INFO_NODE("score on self = " << score);
00090         Util::PropertySet scoreProp;
00091         scoreProp.Add("scoreOnSelf", score);
00092         ScoreFileRepository().Add(modelLoc, &scoreProp);
00093 
00094         delete classifier;
00095         delete src;
00096         delete annotation;
00097         delete params;
00098     }
00099     return 0;
00100 }

Here is the call graph for this function:


Generated on Thu Jan 13 09:14:08 2011 for ImpalaSrc by  doxygen 1.5.1