From 11dacb378afb9a3e4328e24eb79b9e2ed4f1d632 Mon Sep 17 00:00:00 2001 From: Nicolo Fusi Date: Fri, 14 Dec 2012 13:57:29 +0000 Subject: [PATCH 1/5] added autodection of Rasmussen's minimize --- GPy/inference/optimization.py | 64 ++++++++++++++++++++--------------- 1 file changed, 36 insertions(+), 28 deletions(-) diff --git a/GPy/inference/optimization.py b/GPy/inference/optimization.py index 4cf56b69..2c5e2fba 100644 --- a/GPy/inference/optimization.py +++ b/GPy/inference/optimization.py @@ -3,7 +3,13 @@ from scipy import optimize -# import rasmussens_minimize as rasm + +try: + import rasmussens_minimize as rasm + rasm_available = True +except ImportError: + rasm_available = False + import pdb import pylab as pb import datetime as dt @@ -38,7 +44,7 @@ class Optimizer(): self.gtol = gtol self.ftol = ftol self.model = model - + def run(self, **kwargs): start = dt.datetime.now() self.opt(**kwargs) @@ -159,43 +165,45 @@ class opt_simplex(Optimizer): self.trace = None -# class opt_rasm(Optimizer): -# def __init__(self, *args, **kwargs): -# Optimizer.__init__(self, *args, **kwargs) -# self.opt_name = "Rasmussen's Conjugate Gradient" +class opt_rasm(Optimizer): + def __init__(self, *args, **kwargs): + Optimizer.__init__(self, *args, **kwargs) + self.opt_name = "Rasmussen's Conjugate Gradient" -# def opt(self): -# """ -# Run Rasmussen's Conjugate Gradient optimizer -# """ + def opt(self): + """ + Run Rasmussen's Conjugate Gradient optimizer + """ -# assert self.f_fp != None, "Rasmussen's minimizer requires f_fp" -# statuses = ['Converged', 'Line search failed', 'Maximum number of f evaluations reached', -# 'NaNs in optimization'] + assert self.f_fp != None, "Rasmussen's minimizer requires f_fp" + statuses = ['Converged', 'Line search failed', 'Maximum number of f evaluations reached', + 'NaNs in optimization'] -# opt_dict = {} -# if self.xtol is not None: -# print "WARNING: minimize doesn't have an xtol arg, so I'm going to ignore it" -# if self.ftol is not None: -# print "WARNING: minimize doesn't have an ftol arg, so I'm going to ignore it" -# if self.gtol is not None: -# print "WARNING: minimize doesn't have an gtol arg, so I'm going to ignore it" + opt_dict = {} + if self.xtol is not None: + print "WARNING: minimize doesn't have an xtol arg, so I'm going to ignore it" + if self.ftol is not None: + print "WARNING: minimize doesn't have an ftol arg, so I'm going to ignore it" + if self.gtol is not None: + print "WARNING: minimize doesn't have an gtol arg, so I'm going to ignore it" -# opt_result = rasm.minimize(self.x_init, self.f_fp, (), messages = self.messages, -# maxnumfuneval = self.max_f_eval) -# self.x_opt = opt_result[0] -# self.f_opt = opt_result[1][-1] -# self.funct_eval = opt_result[2] -# self.status = statuses[opt_result[3]] + opt_result = rasm.minimize(self.x_init, self.f_fp, (), messages = self.messages, + maxnumfuneval = self.max_f_eval) + self.x_opt = opt_result[0] + self.f_opt = opt_result[1][-1] + self.funct_eval = opt_result[2] + self.status = statuses[opt_result[3]] -# self.trace = opt_result[1] + self.trace = opt_result[1] def get_optimizer(f_min): optimizers = {'fmin_tnc': opt_tnc, - # 'rasmussen': opt_rasm, 'simplex': opt_simplex, 'lbfgsb': opt_lbfgsb} + if rasm_available: + optimizers['rasmussen'] = opt_rasm + for opt_name in optimizers.keys(): if opt_name.lower().find(f_min.lower()) != -1: return optimizers[opt_name] From b4190f907e6ed0f0b7ea6dc7be3e8456cd8a1d99 Mon Sep 17 00:00:00 2001 From: Nicolo Fusi Date: Fri, 14 Dec 2012 14:00:50 +0000 Subject: [PATCH 2/5] fixed interface change in optimization.py --- GPy/inference/optimization.py | 8 ++++---- GPy/models/warped_GP.py | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/GPy/inference/optimization.py b/GPy/inference/optimization.py index 2c5e2fba..9bc44fd4 100644 --- a/GPy/inference/optimization.py +++ b/GPy/inference/optimization.py @@ -170,12 +170,12 @@ class opt_rasm(Optimizer): Optimizer.__init__(self, *args, **kwargs) self.opt_name = "Rasmussen's Conjugate Gradient" - def opt(self): + def opt(self, f_fp = None, f = None, fp = None): """ Run Rasmussen's Conjugate Gradient optimizer """ - assert self.f_fp != None, "Rasmussen's minimizer requires f_fp" + assert f_fp != None, "Rasmussen's minimizer requires f_fp" statuses = ['Converged', 'Line search failed', 'Maximum number of f evaluations reached', 'NaNs in optimization'] @@ -187,8 +187,8 @@ class opt_rasm(Optimizer): if self.gtol is not None: print "WARNING: minimize doesn't have an gtol arg, so I'm going to ignore it" - opt_result = rasm.minimize(self.x_init, self.f_fp, (), messages = self.messages, - maxnumfuneval = self.max_f_eval) + opt_result = rasm.minimize(self.x_init, f_fp, (), messages = self.messages, + maxnumfuneval = self.max_f_eval) self.x_opt = opt_result[0] self.f_opt = opt_result[1][-1] self.funct_eval = opt_result[2] diff --git a/GPy/models/warped_GP.py b/GPy/models/warped_GP.py index 9a1bcbe1..bf5af21f 100644 --- a/GPy/models/warped_GP.py +++ b/GPy/models/warped_GP.py @@ -22,7 +22,7 @@ class warpedGP(GP_regression): if warping_function == None: self.warping_function = TanhWarpingFunction(warping_terms) # self.warping_params = np.random.randn(self.warping_function.n_terms, 3) - self.warping_params = np.ones((self.warping_function.n_terms, 3))*1.0 # TODO better init + self.warping_params = np.ones((self.warping_function.n_terms, 3))*0.0 # TODO better init self.warp_params_shape = (self.warping_function.n_terms, 3) # todo get this from the subclass self.Z = Y.copy() From 7a69b4c2a27dd1bdb0c941b796fe31b1dfb79eb0 Mon Sep 17 00:00:00 2001 From: Nicolo Fusi Date: Thu, 10 Jan 2013 16:35:52 +0000 Subject: [PATCH 3/5] removed unused posix import --- GPy/util/datasets.py | 1 - 1 file changed, 1 deletion(-) diff --git a/GPy/util/datasets.py b/GPy/util/datasets.py index 3379ccd3..bc7bf546 100644 --- a/GPy/util/datasets.py +++ b/GPy/util/datasets.py @@ -1,5 +1,4 @@ import os -import posix import pylab as pb import numpy as np import GPy From 3f01cbdbccbc85b98a29efcb61b5c369913f54b7 Mon Sep 17 00:00:00 2001 From: Nicolo Fusi Date: Fri, 11 Jan 2013 12:05:53 +0000 Subject: [PATCH 4/5] removed ticks and checkmarks from checkgrad() output, coloring param name instead --- GPy/core/model.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/GPy/core/model.py b/GPy/core/model.py index 5d977378..0c1594a2 100644 --- a/GPy/core/model.py +++ b/GPy/core/model.py @@ -339,10 +339,12 @@ class model(parameterised): ratio = (f1-f2)/(2*step*gradient) difference = np.abs((f1-f2)/2/step - gradient) if verbose: - print "{0:10s} ratio: {1:15f} difference: {2:15f} analytical: {3:15f} numerical: {4:15f}".format(names[i], float(ratio), float(difference), gradient, float(numerical_gradient)), if (np.abs(ratio-1) Date: Fri, 11 Jan 2013 13:06:02 +0000 Subject: [PATCH 5/5] pretty printing of gradchecks --- GPy/core/model.py | 43 +++++++++++++++++++++++++++++++------------ 1 file changed, 31 insertions(+), 12 deletions(-) diff --git a/GPy/core/model.py b/GPy/core/model.py index 0c1594a2..46cf6ac9 100644 --- a/GPy/core/model.py +++ b/GPy/core/model.py @@ -308,9 +308,7 @@ class model(parameterised): numerical_gradient = (f1-f2)/(2*dx) ratio = (f1-f2)/(2*np.dot(dx,gradient)) if verbose: - #print "gradient = ",gradient - #print "numerical gradient = ",numerical_gradient - print " Gradient ratio = ", ratio, '\n' + print "Gradient ratio = ", ratio, '\n' sys.stdout.flush() if (np.abs(1.-ratio)