diff --git a/GPy/core/model.py b/GPy/core/model.py index 8152dae1..89a2a3f0 100644 --- a/GPy/core/model.py +++ b/GPy/core/model.py @@ -118,12 +118,12 @@ class Model(Parameterized): """ The objective function for the given algorithm. - This function is the true objective, which wants to be minimized. - Note that all parameters are already set and in place, so you just need + This function is the true objective, which wants to be minimized. + Note that all parameters are already set and in place, so you just need to return the objective function here. For probabilistic models this is the negative log_likelihood - (including the MAP prior), so we return it here. If your model is not + (including the MAP prior), so we return it here. If your model is not probabilistic, just return your objective to minimize here! """ return -float(self.log_likelihood()) - self.log_prior() @@ -131,18 +131,18 @@ class Model(Parameterized): def objective_function_gradients(self): """ The gradients for the objective function for the given algorithm. - The gradients are w.r.t. the *negative* objective function, as + The gradients are w.r.t. the *negative* objective function, as this framework works with *negative* log-likelihoods as a default. You can find the gradient for the parameters in self.gradient at all times. This is the place, where gradients get stored for parameters. - This function is the true objective, which wants to be minimized. - Note that all parameters are already set and in place, so you just need + This function is the true objective, which wants to be minimized. + Note that all parameters are already set and in place, so you just need to return the gradient here. For probabilistic models this is the gradient of the negative log_likelihood - (including the MAP prior), so we return it here. If your model is not + (including the MAP prior), so we return it here. If your model is not probabilistic, just return your *negative* gradient here! """ return -(self._log_likelihood_gradients() + self._log_prior_gradients()) @@ -227,13 +227,15 @@ class Model(Parameterized): if optimizer is None: optimizer = self.preferred_optimizer + elif isinstance(optimizer, optimization.Optimizer): + opt = optimizer + else: + optimizer = optimization.get_optimizer(optimizer) + opt = optimizer(start, model=self, **kwargs) if start == None: start = self.optimizer_array - optimizer = optimization.get_optimizer(optimizer) - opt = optimizer(start, model=self, **kwargs) - opt.run(f_fp=self._objective_grads, f=self._objective, fp=self._grads) self.optimization_runs.append(opt)