From d63d370641846642bdc02f0295177f7f37b5f5fb Mon Sep 17 00:00:00 2001 From: Alan Saul Date: Wed, 29 May 2013 13:46:55 +0100 Subject: [PATCH] About to rip out old chain rule method of learning gradients --- GPy/likelihoods/Laplace.py | 4 +++- GPy/testing/laplace_approx_tests.py | 3 +-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/GPy/likelihoods/Laplace.py b/GPy/likelihoods/Laplace.py index af20d36a..666fa227 100644 --- a/GPy/likelihoods/Laplace.py +++ b/GPy/likelihoods/Laplace.py @@ -87,7 +87,7 @@ class Laplace(likelihood): #dL_dytil_simple_term = -0.5*np.dot(inv(self.K+self.Sigma_tilde), #dL_dytil_simple_term = -np.dot(self.Y.T, inv(self.K+self.Sigma_tilde), self.Y) c = inv(self.K+self.Sigma_tilde) - dL_dytil_simple_term = -0.5*np.diag(np.dot(c, self.Y) + np.dot(self.Y.T, c)) + dL_dytil_simple_term = -0.5*np.diag(2*np.dot(c, self.Y)) P = np.diagflat(1/np.dot(Ki, self.f_hat)) K_Wi_i = inv(self.K+self.Sigma_tilde) @@ -96,6 +96,7 @@ class Laplace(likelihood): +0.5*mdot(K_Wi_i, self.Y, self.Y.T, K_Wi_i, P) ) * np.eye(self.N)) dL_dytil = dL_dytil_simple_term + dL_dytil_difficult_term + dL_dytil = dL_dytil.reshape(1, self.N) d3likelihood_d3fhat = self.likelihood_function.d3link(self.data, self.f_hat, self.extra_data) Wi = np.diagonal(self.Sigma_tilde) #Convenience @@ -329,6 +330,7 @@ class Laplace(likelihood): #+ y_W_f #+ self.ln_z_hat #) + self.Z_tilde = 0 ##Check it isn't singular! if cond(self.W) > epsilon: diff --git a/GPy/testing/laplace_approx_tests.py b/GPy/testing/laplace_approx_tests.py index acb1c822..15d84c9c 100644 --- a/GPy/testing/laplace_approx_tests.py +++ b/GPy/testing/laplace_approx_tests.py @@ -62,8 +62,6 @@ class Likelihood_F_Grad(LikelihoodParamGrad): def log_likelihood(self): ll = self.func(self) - if self.param_name == "dL_dfhat_": - import ipdb; ipdb.set_trace() ### XXX BREAKPOINT if len(ll.shape) == 0 or len(ll.shape) == 1: return ll.sum() elif len(ll.shape) == 2: @@ -128,6 +126,7 @@ class LaplaceTests(unittest.TestCase): def test_dL_dfhat(self): def L(self): + #return np.array(-0.5 * self.D * self.K_logdet + self._model_fit_term()) #Ignore Z for now return np.array(-0.5 * self.D * self.K_logdet + self._model_fit_term() + self.likelihood.Z) self.m = Likelihood_F_Grad(X=self.X, likelihood_function=self.stu_t_likelihood,