[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