[opengm] 114/386: fudwefrew

Ghislain Vaillant ghisvail-guest at moszumanska.debian.org
Wed Aug 31 08:35:15 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 267ca720f030cde0fc67cac80106cb9615dafd03
Author: DerThorsten <thorsten.beier at iwr.uni-heidelberg.de>
Date:   Thu Dec 18 13:26:07 2014 +0100

    fudwefrew
---
 fubar/example1.py                                  | 28 ++++++++--
 include/opengm/python/opengmpython.hxx             |  4 +-
 .../opengm/_inference_interface_generator.py       | 59 ++++++++++++++++++++++
 .../python/opengm/inference/inf_def_visitor.hxx    |  3 +-
 src/interfaces/python/opengm/learning/__init__.py  | 19 +++++--
 .../python/opengm/learning/pyGridSearchLearner.cxx | 38 ++++++++++----
 6 files changed, 131 insertions(+), 20 deletions(-)

diff --git a/fubar/example1.py b/fubar/example1.py
index 038399b..d547234 100644
--- a/fubar/example1.py
+++ b/fubar/example1.py
@@ -1,8 +1,30 @@
 import opengm
-import opengm.learning
+import opengm.learning as learning
+from opengm import numpy
 
 
 
-datasetA = opengm.learning.createDataset(loss='hamming')
-datasetB = opengm.learning.createDataset(loss='generalized-hamming')
+# weight vector
+nWeights = 100
+weightVals = numpy.ones(nWeights)*0.5
+weights = opengm.learning.Weights(weightVals)
 
+
+
+dataset =learning.createDataset(loss='h')
+
+print "type of dataset", dataset
+
+
+
+
+# for grid search learner
+lowerBounds = numpy.zeros(nWeights)
+upperBounds = numpy.ones(nWeights)
+nTestPoints  =numpy.ones(nWeights).astype('uint64')*10
+
+
+learner = learning.gridSearchLearner(dataset=dataset,lowerBounds=lowerBounds, upperBounds=upperBounds,nTestPoints=nTestPoints)
+
+learner.learn(infCls=opengm.inference.BeliefPropagation, 
+              parameter=opengm.InfParam(damping=0.5))
diff --git a/include/opengm/python/opengmpython.hxx b/include/opengm/python/opengmpython.hxx
index 84c54d2..00eea11 100644
--- a/include/opengm/python/opengmpython.hxx
+++ b/include/opengm/python/opengmpython.hxx
@@ -120,8 +120,8 @@ namespace python{
    >::type   GmAdder;
 
 
-   typedef opengm::datasets::Dataset<GmAdder, opengm::learning::HammingLoss > GmAdderHammingLossDataset;
-   typedef opengm::datasets::Dataset<GmAdder, opengm::learning::GeneralizedHammingLoss > GmAdderGeneralizedHammingLossDataset;
+   typedef opengm::datasets::EditableDataset<GmAdder, opengm::learning::HammingLoss > GmAdderHammingLossDataset;
+   typedef opengm::datasets::EditableDataset<GmAdder, opengm::learning::GeneralizedHammingLoss > GmAdderGeneralizedHammingLossDataset;
 
 
    typedef GmAdder::FactorType FactorGmAdder;
diff --git a/src/interfaces/python/opengm/_inference_interface_generator.py b/src/interfaces/python/opengm/_inference_interface_generator.py
index 887d26a..15aa072 100644
--- a/src/interfaces/python/opengm/_inference_interface_generator.py
+++ b/src/interfaces/python/opengm/_inference_interface_generator.py
@@ -211,6 +211,60 @@ def classGenerator(
 
         self.inference = self._selectedInfClass(self.gm, self.parameter)
 
+    @classmethod
+    def get_cpp_parameter(cls, operator, accumulator, parameter):
+        _meta_parameter = parameter
+        # get hyper parameter (as minStCut for graphcut, or the subsolver for
+        # dualdec.)
+        hyperParamKeywords = inferenceClasses.hyperParameterKeywords
+        numHyperParams = len(hyperParamKeywords)
+        userHyperParams = [None]*numHyperParams
+        collectedHyperParameters = 0
+        # get the users hyper parameter ( if given)
+
+        if(_meta_parameter is not None):
+            for hpIndex, hyperParamKeyword in enumerate(hyperParamKeywords):
+                if hyperParamKeyword in _meta_parameter.kwargs:
+                    userHyperParams[hpIndex] = _meta_parameter.kwargs.pop(
+                        hyperParamKeyword)
+                    collectedHyperParameters += 1
+
+            # check if ZERO or ALL hyperParamerts have been collected
+            if collectedHyperParameters != 0 and collectedHyperParameters != numHyperParams:
+                raise RuntimeError("All or none hyper-parameter must be given")
+
+        # check if the WHOLE tuple of hyperParameters is allowed
+        if collectedHyperParameters != 0:
+            if tuple(str(x) for x in userHyperParams) not in inferenceClasses.implDict:
+                raise RuntimeError("%s is not an allowed hyperParameter\nAllowed hyperParameters are %s" % (
+                    repr(userHyperParams), repr(inferenceClasses.implDict.keys())))
+        else:
+            userHyperParams = defaultHyperParams
+
+        #try:
+        # get the selected inference class and the parameter
+        if(numHyperParams == 0):
+            
+            _selectedInfClass, _selectedInfParamClass = inferenceClasses.implDict[
+                    "__NONE__"][(operator, accumulator)]
+        else:
+            hp = tuple(str(x) for x in userHyperParams)
+            _selectedInfClass, _selectedInfParamClass = inferenceClasses.implDict[
+                hp][(operator, accumulator)]
+        #except:
+        #    dictStr=str(inferenceClasses.implDict)
+        #    raise RuntimeError("given seminring (operator = %s ,accumulator = %s) is not implemented for this solver\n %s" % \
+        #        (operator, accumulator,dictStr))
+
+        if _meta_parameter is None:
+            cppParam = self._selectedInfClass._parameter()
+            cppParam.set()
+        else:
+            cppParam = to_native_class_converter(
+                givenValue=_meta_parameter, nativeClass=_selectedInfParamClass)
+            assert cppParam is not None
+
+        return cppParam
     def verboseVisitor(self, printNth=1, multiline=True):
         """ factory function to get a verboseVisitor:
 
@@ -572,6 +626,11 @@ def classGenerator(
     infClass = type(classname, (InferenceBase,), memberDict)
 
     infClass.__init__ = inference_init
+
+
+    infClass.get_cpp_parameter = get_cpp_parameter
+
+
     # print to string!!!
     old_stdout = sys.stdout
     sys.stdout = mystdout = StringIO()
diff --git a/src/interfaces/python/opengm/inference/inf_def_visitor.hxx b/src/interfaces/python/opengm/inference/inf_def_visitor.hxx
index ad43751..cba8ee5 100644
--- a/src/interfaces/python/opengm/inference/inf_def_visitor.hxx
+++ b/src/interfaces/python/opengm/inference/inf_def_visitor.hxx
@@ -141,6 +141,7 @@ public:
     template <class classT>
     void visit(classT& c) const{
         std::string className = std::string("_")+algName_;
+
         for(size_t hp=0;hp<infSetup_.hyperParameters.size();++hp){
             className+=std::string("_");
             className+=infSetup_.hyperParameters[hp];
@@ -261,4 +262,4 @@ public:
 
 
 
-#endif // INF_DEF_VISITOR 
\ No newline at end of file
+#endif // INF_DEF_VISITOR 
diff --git a/src/interfaces/python/opengm/learning/__init__.py b/src/interfaces/python/opengm/learning/__init__.py
index 756c976..7a93b72 100644
--- a/src/interfaces/python/opengm/learning/__init__.py
+++ b/src/interfaces/python/opengm/learning/__init__.py
@@ -7,6 +7,17 @@ DatasetWithHammingLoss.lossType = 'hamming'
 DatasetWithGeneralizedHammingLoss.lossType = 'generalized-hamming'
 
 
+
+
+def _extendedLearn(self, infCls, parameter = None):
+    if parameter is None:
+        parameter = opengm.InfParam()
+    cppParam  =  infCls.get_cpp_parameter(operator='adder',accumulator='minimizer',parameter=parameter)
+    self._learn(cppParam)
+
+GridSearch_HammingLossParameter.learn  =_extendedLearn
+GridSearch_GeneralizedHammingLoss.learn  =_extendedLearn
+        
 def createDataset(loss='hamming', numInstances=0):
     
     if loss not in ['hamming','h','gh','generalized-hamming']:
@@ -32,7 +43,6 @@ def gridSearchLearner(dataset, lowerBounds, upperBounds, nTestPoints):
         leanerParamCls = GridSearch_GeneralizedHammingLossParameter
 
     nr = numpy.require 
-
     sizeT_type = 'uint64'
 
     if struct.calcsize("P") * 8 == 32:
@@ -41,8 +51,7 @@ def gridSearchLearner(dataset, lowerBounds, upperBounds, nTestPoints):
     param = leanerParamCls(nr(lowerBounds,dtype='float64'), nr(lowerBounds,dtype='float64'), 
                            nr(lowerBounds,dtype=sizeT_type))
 
-    learner = learnerCls(dataset, param)
-
+    learner = leanerParamCls(dataset, param)
     return learner
 
 
@@ -78,3 +87,7 @@ def lPottsFunctions(nFunctions, numberOfLabels, features, weightIds):
 
 def lUnaryFunctions(nFunctions, numberOfLabels, features, weightIds):
     raise RuntimeError("not yet implemented")
+
+
+
+
diff --git a/src/interfaces/python/opengm/learning/pyGridSearchLearner.cxx b/src/interfaces/python/opengm/learning/pyGridSearchLearner.cxx
index 74946f1..d86c2b6 100644
--- a/src/interfaces/python/opengm/learning/pyGridSearchLearner.cxx
+++ b/src/interfaces/python/opengm/learning/pyGridSearchLearner.cxx
@@ -6,7 +6,7 @@
 
 #include <opengm/inference/icm.hxx>
 #include <opengm/learning/gridsearch-learning.hxx>
-
+#include <opengm/inference/messagepassing/messagepassing.hxx>
 
 namespace bp = boost::python;
 namespace op = opengm::python;
@@ -28,15 +28,18 @@ namespace opengm{
         return p;
     }
 
+    template<class L >
+    L * pyGridSearchConstructor(
+        typename L::DatasetType & dataset,
+        const typename L::Parameter & param
+    ){
+        L * l  = new L(dataset, param);
+        return l;
+    }
 
-    template<class LEARNER>
-    void pyLearnDummy(LEARNER & learner){
-
-        typedef typename  LEARNER::GMType GMType;
-        typedef opengm::ICM<GMType, opengm::Minimizer> Inf;
-        typedef typename Inf::Parameter InfParam;
-        InfParam infParam;
-        learner. template learn<Inf>(infParam);
+    template<class LEARNER, class INF>
+    void pyLearnWithInf(LEARNER & learner, const typename INF::Parameter & param){
+        learner. template learn<INF>(param);
     }
 
     template<class DATASET>
@@ -53,8 +56,21 @@ namespace opengm{
             .def("__init__", make_constructor(&pyGridSearchParamConstructor<PyLearnerParam> ,boost::python::default_call_policies()))
         ;
 
-        bp::class_<PyLearner>( clsName.c_str(), bp::init<DatasetType &, const PyLearnerParam &>() )
-        .def("learn",&pyLearnDummy<PyLearner>)
+
+
+        // SOME INFERENCE METHODS
+        typedef typename  PyLearner::GMType GMType;
+        typedef opengm::Minimizer ACC;
+
+        typedef opengm::ICM<GMType, ACC> IcmInf;
+        typedef opengm::BeliefPropagationUpdateRules<GMType, ACC> UpdateRulesType;
+        typedef opengm::MessagePassing<GMType, ACC, UpdateRulesType, opengm::MaxDistance> BpInf;
+
+        bp::class_<PyLearner>( clsName.c_str(), bp::no_init )
+        .def("__init__", make_constructor(&pyGridSearchConstructor<PyLearner> ,boost::python::default_call_policies()))
+        .def("_learn",&pyLearnWithInf<PyLearner, IcmInf>)
+        .def("_learn",&pyLearnWithInf<PyLearner, BpInf>)
+
         ;
     }
 

-- 
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