[opengm] 218/386: refactor WeightGradientFunctor

Ghislain Vaillant ghisvail-guest at moszumanska.debian.org
Wed Aug 31 08:37:52 UTC 2016


This is an automated email from the git hooks/post-receive script.

ghisvail-guest pushed a commit to branch debian/master
in repository opengm.

commit cd40760d80b8196f64923277c286a924b6776945
Author: joergkappes <kappes at math.uni-heidelberg.de>
Date:   Mon Jan 12 12:01:30 2015 +0100

     refactor  WeightGradientFunctor
---
 .../learning/maximum-likelihood-learning.hxx       | 32 ++++++++++++++--------
 1 file changed, 20 insertions(+), 12 deletions(-)

diff --git a/include/opengm/learning/maximum-likelihood-learning.hxx b/include/opengm/learning/maximum-likelihood-learning.hxx
index c553a59..d282ba8 100644
--- a/include/opengm/learning/maximum-likelihood-learning.hxx
+++ b/include/opengm/learning/maximum-likelihood-learning.hxx
@@ -30,9 +30,16 @@
 //typedef opengm::ICM<GM,opengm::Minimizer> INF;
 //typedef opengm::learning::Weights<ValueType> WeightType;
 
-struct WeightGradientFunctor{
-    WeightGradientFunctor(size_t weight, std::vector<size_t>::iterator labelVectorBegin)
-        : weight_(weight),
+
+
+namespace opengm {
+namespace learning {
+
+template<class IT> 
+class WeightGradientFunctor{
+public:
+   WeightGradientFunctor(size_t weightIndex, IT labelVectorBegin) //std::vector<size_t>::iterator labelVectorBegin)
+        : weightIndex_(weightIndex),
           labelVectorBegin_(labelVectorBegin){
     }
 
@@ -40,7 +47,7 @@ struct WeightGradientFunctor{
     void operator()(const F & function ){
         size_t index=-1;
         for(size_t i=0; i<function.numberOfWeights();++i)
-            if(function.weightIndex(i)==weight_)
+            if(function.weightIndex(i)==weightIndex_)
                 index=i;
         if(index!=-1)
             result_ = function.weightGradient(index, labelVectorBegin_);
@@ -48,15 +55,11 @@ struct WeightGradientFunctor{
             result_ = 0;
     }
 
-    size_t weight_;
-   //  std::vector<LabelType>::iterator labelVectorBegin_; 
-    std::vector<size_t>::iterator labelVectorBegin_;
+    size_t weightIndex_;
+    IT  labelVectorBegin_;
     double result_;
 };
 
-namespace opengm {
-namespace learning {
-
 template<class DATASET>
 class MaximumLikelihoodLearner
 {
@@ -80,7 +83,8 @@ public:
     class Parameter{
     public:
        size_t maxNumSteps_;
-       Parameter() :maxNumSteps_(100)
+       Parameter() :
+          maxNumSteps_(100)
           {;}
     };
    
@@ -189,6 +193,10 @@ void MaximumLikelihoodLearner<DATASET>::learn(){//const typename INF::Parameter
         std::vector< std::vector<ValueType> > b  ( dataset_.getNumberOfModels(), std::vector<ValueType> ( dataset_.getModel(0).numberOfFactors()) );
 
         for(IndexType m=0; m<dataset_.getNumberOfModels(); ++m){
+
+           //****************************************
+           // Build dummy model
+           //***************************************
             GmBpType bpModel(dataset_.getModel(m).space());
 
             for(IndexType f = 0; f<dataset_.getModel(m).numberOfFactors();++f){
@@ -240,7 +248,7 @@ void MaximumLikelihoodLearner<DATASET>::learn(){//const typename INF::Parameter
                         labelVector[v] = gt[indexVector[v]];
                         piW[m][f] *=w[m][indexVector[v]];
                     }
-                    WeightGradientFunctor weightGradientFunctor(p, labelVector.begin());
+                    WeightGradientFunctor<typename std::vector<LabelType>::iterator> weightGradientFunctor(p, labelVector.begin());
                     factor.callFunctor(weightGradientFunctor);
                     f_p =weightGradientFunctor.result_;
 

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-science/packages/opengm.git



More information about the debian-science-commits mailing list