From 4deac0103ce70390f1043b7298628d53ca66c530 Mon Sep 17 00:00:00 2001 From: Max Zwiessele Date: Thu, 15 Jan 2015 09:02:22 +0000 Subject: [PATCH 1/7] [transformations] bugfix for pickling --- GPy/core/parameterization/transformations.py | 25 ++++++++++++++------ 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/GPy/core/parameterization/transformations.py b/GPy/core/parameterization/transformations.py index be08f870..d929b1d9 100644 --- a/GPy/core/parameterization/transformations.py +++ b/GPy/core/parameterization/transformations.py @@ -79,8 +79,10 @@ class Logexp(Transformation): class NormalTheta(Transformation): + "Do not use, not officially supported!" _instances = [] - def __new__(cls, mu_indices, var_indices): + def __new__(cls, mu_indices=None, var_indices=None): + "Do not use, not officially supported!" if cls._instances: cls._instances[:] = [instance for instance in cls._instances if instance()] for instance in cls._instances: @@ -143,9 +145,10 @@ class NormalTheta(Transformation): self.var_indices = state[1] class NormalNaturalAntti(NormalTheta): + "Do not use, not officially supported!" _instances = [] - _logexp = Logexp() - def __new__(cls, mu_indices, var_indices): + def __new__(cls, mu_indices=None, var_indices=None): + "Do not use, not officially supported!" if cls._instances: cls._instances[:] = [instance for instance in cls._instances if instance()] for instance in cls._instances: @@ -182,8 +185,10 @@ class NormalNaturalAntti(NormalTheta): return "natantti" class NormalEta(Transformation): + "Do not use, not officially supported!" _instances = [] - def __new__(cls, mu_indices, var_indices): + def __new__(cls, mu_indices=None, var_indices=None): + "Do not use, not officially supported!" if cls._instances: cls._instances[:] = [instance for instance in cls._instances if instance()] for instance in cls._instances: @@ -223,8 +228,10 @@ class NormalEta(Transformation): return "eta" class NormalNaturalThroughTheta(NormalTheta): + "Do not use, not officially supported!" _instances = [] - def __new__(cls, mu_indices, var_indices): + def __new__(cls, mu_indices=None, var_indices=None): + "Do not use, not officially supported!" if cls._instances: cls._instances[:] = [instance for instance in cls._instances if instance()] for instance in cls._instances: @@ -272,8 +279,10 @@ class NormalNaturalThroughTheta(NormalTheta): class NormalNaturalWhooot(NormalTheta): + "Do not use, not officially supported!" _instances = [] - def __new__(cls, mu_indices, var_indices): + def __new__(cls, mu_indices=None, var_indices=None): + "Do not use, not officially supported!" if cls._instances: cls._instances[:] = [instance for instance in cls._instances if instance()] for instance in cls._instances: @@ -307,8 +316,10 @@ class NormalNaturalWhooot(NormalTheta): return "natgrad" class NormalNaturalThroughEta(NormalEta): + "Do not use, not officially supported!" _instances = [] - def __new__(cls, mu_indices, var_indices): + def __new__(cls, mu_indices=None, var_indices=None): + "Do not use, not officially supported!" if cls._instances: cls._instances[:] = [instance for instance in cls._instances if instance()] for instance in cls._instances: From 57e941140c3e4f1f0c378d15659b379ffe2b471c Mon Sep 17 00:00:00 2001 From: Max Zwiessele Date: Thu, 15 Jan 2015 09:02:45 +0000 Subject: [PATCH 2/7] [opt] unified printing of status of optimization --- GPy/core/model.py | 3 ++- GPy/core/verbose_optimization.py | 9 +++++++-- GPy/inference/optimization/optimization.py | 2 +- GPy/inference/optimization/scg.py | 11 +++++++---- 4 files changed, 17 insertions(+), 8 deletions(-) diff --git a/GPy/core/model.py b/GPy/core/model.py index 05a514e8..c63a29e5 100644 --- a/GPy/core/model.py +++ b/GPy/core/model.py @@ -256,8 +256,9 @@ class Model(Parameterized): optimizer = optimization.get_optimizer(optimizer) opt = optimizer(start, model=self, max_iters=max_iters, **kwargs) - with VerboseOptimization(self, opt, maxiters=max_iters, verbose=messages, ipython_notebook=ipython_notebook): + with VerboseOptimization(self, opt, maxiters=max_iters, verbose=messages, ipython_notebook=ipython_notebook) as vo: opt.run(f_fp=self._objective_grads, f=self._objective, fp=self._grads) + vo.finish(opt) self.optimization_runs.append(opt) diff --git a/GPy/core/verbose_optimization.py b/GPy/core/verbose_optimization.py index cfec0119..78b6127e 100644 --- a/GPy/core/verbose_optimization.py +++ b/GPy/core/verbose_optimization.py @@ -22,6 +22,7 @@ class VerboseOptimization(object): self.len_maxiters = len(str(maxiters)) self.opt_name = opt.opt_name self.model.add_observer(self, self.print_status) + self.status = 'running' self.update() @@ -65,7 +66,7 @@ class VerboseOptimization(object): else: self.exps = exponents(self.fnow, self.current_gradient) print 'Running {} Code:'.format(self.opt_name) - print ' {3:5s} {0:{mi}s} {1:11s} {2:11s}'.format("i", "f", "|g|", "secs", mi=self.len_maxiters) + print ' {3:7s} {0:{mi}s} {1:11s} {2:11s}'.format("i", "f", "|g|", "secs", mi=self.len_maxiters) def __enter__(self): self.start = time.time() @@ -78,6 +79,7 @@ class VerboseOptimization(object): ['evaluation', "{:>0{l}}".format(self.iteration, l=self.len_maxiters)], ['objective', "{: > 12.3E}".format(self.fnow)], ['||gradient||', "{: >+12.3E}".format(float(self.current_gradient))], + ['status', "{:s}".format(self.status)], ] #message = "Lik:{:5.3E} Grad:{:5.3E} Lik:{:5.3E} Len:{!s}".format(float(m.log_likelihood()), np.einsum('i,i->', grads, grads), float(m.likelihood.variance), " ".join(["{:3.2E}".format(l) for l in m.kern.lengthscale.values])) html_begin = """