From 57e941140c3e4f1f0c378d15659b379ffe2b471c Mon Sep 17 00:00:00 2001 From: Max Zwiessele Date: Thu, 15 Jan 2015 09:02:45 +0000 Subject: [PATCH] [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 = """