changed gradient interface to gp and sparse GP

This commit is contained in:
James Hensman 2014-01-28 14:40:07 +00:00
parent a3f1fe38c3
commit 06da98f9ea
3 changed files with 8 additions and 3 deletions

View file

@ -59,7 +59,8 @@ class GP(Model):
self.parameters_changed() self.parameters_changed()
def parameters_changed(self): def parameters_changed(self):
self.posterior, self._log_marginal_likelihood, self._dL_dK = self.inference_method.inference(self.kern, self.X, self.likelihood, self.Y) self.posterior, self._log_marginal_likelihood, grad_dict = self.inference_method.inference(self.kern, self.X, self.likelihood, self.Y)
self._dL_dK = grad_dict['dL_dK']
def log_likelihood(self): def log_likelihood(self):
return self._log_marginal_likelihood return self._log_marginal_likelihood

View file

@ -11,6 +11,10 @@ class SparseGP(GP):
""" """
A general purpose Sparse GP model A general purpose Sparse GP model
This model allows (approximate) inference using variational DTC or FITC
(Gaussian likelihoods) as well as non-conjugate sparse methods based on
these.
:param X: inputs :param X: inputs
:type X: np.ndarray (num_data x input_dim) :type X: np.ndarray (num_data x input_dim)
:param likelihood: a likelihood instance, containing the observed data :param likelihood: a likelihood instance, containing the observed data
@ -56,7 +60,7 @@ class SparseGP(GP):
self.add_parameter(self.likelihood, gradient=lambda:self.likelihood._gradients(partial=self.partial_for_likelihood)) self.add_parameter(self.likelihood, gradient=lambda:self.likelihood._gradients(partial=self.partial_for_likelihood))
def parameters_changed(self): def parameters_changed(self):
self.posterior = self.inference_method.inference(self.kern, self.X, self.X_variance, self.Z, self.likelihood, self.Y) self.posterior, self._log_marginal_likelihood, self.grad_dict = self.inference_method.inference(self.kern, self.X, self.X_variance, self.Z, self.likelihood, self.Y)
#The derivative of the bound wrt the inducing inputs Z #The derivative of the bound wrt the inducing inputs Z
self.Z.gradient = self.kern.dK_dX(self.dL_dKmm, self.Z) self.Z.gradient = self.kern.dK_dX(self.dL_dKmm, self.Z)

View file

@ -53,6 +53,6 @@ class ExactGaussianInference(object):
likelihood.update_gradients(np.diag(dL_dK)) likelihood.update_gradients(np.diag(dL_dK))
return Posterior(LW, alpha, K), log_marginal, dL_dK return Posterior(LW, alpha, K), log_marginal, {'dL_dK':dL_dK}