From 4eac0bd6db73a2b1bed67ec5b9a2a78b210bf9bd Mon Sep 17 00:00:00 2001 From: James Hensman Date: Tue, 25 Feb 2014 08:58:51 +0000 Subject: [PATCH] started sorting out some tests --- .../conjugate_gradient_descent.py | 2 +- GPy/kern/_src/add.py | 8 ++--- GPy/kern/_src/static.py | 32 +++++++++---------- GPy/testing/bgplvm_tests.py | 24 +++++++------- GPy/testing/gplvm_tests.py | 12 +++---- GPy/testing/{ => old_tests}/bcgplvm_tests.py | 0 GPy/testing/{ => old_tests}/cgd_tests.py | 7 ++-- 7 files changed, 42 insertions(+), 43 deletions(-) rename GPy/testing/{ => old_tests}/bcgplvm_tests.py (100%) rename GPy/testing/{ => old_tests}/cgd_tests.py (94%) diff --git a/GPy/inference/optimization/conjugate_gradient_descent.py b/GPy/inference/optimization/conjugate_gradient_descent.py index 9eabf5dd..8f90b536 100644 --- a/GPy/inference/optimization/conjugate_gradient_descent.py +++ b/GPy/inference/optimization/conjugate_gradient_descent.py @@ -3,7 +3,7 @@ Created on 24 Apr 2013 @author: maxz ''' -from GPy.inference.gradient_descent_update_rules import FletcherReeves, \ +from gradient_descent_update_rules import FletcherReeves, \ PolakRibiere from Queue import Empty from multiprocessing import Value diff --git a/GPy/kern/_src/add.py b/GPy/kern/_src/add.py index d0ef2842..1022124d 100644 --- a/GPy/kern/_src/add.py +++ b/GPy/kern/_src/add.py @@ -67,13 +67,13 @@ class Add(Kern): return sum([p.Kdiag(X[:, i_s]) for p, i_s in zip(self._parameters_, self.input_slices)]) - def psi0(self, Z, mu, S): + def psi0(self, Z, variational_posterior): return np.sum([p.psi0(Z[:, i_s], mu[:, i_s], S[:, i_s]) for p, i_s in zip(self._parameters_, self.input_slices)],0) - def psi1(self, Z, mu, S): + def psi1(self, Z, variational_posterior): return np.sum([p.psi1(Z[:, i_s], mu[:, i_s], S[:, i_s]) for p, i_s in zip(self._parameters_, self.input_slices)], 0) - def psi2(self, Z, mu, S): + def psi2(self, Z, variational_posterior): psi2 = np.sum([p.psi2(Z[:, i_s], mu[:, i_s], S[:, i_s]) for p, i_s in zip(self._parameters_, self.input_slices)], 0) # compute the "cross" terms @@ -101,7 +101,7 @@ class Add(Kern): raise NotImplementedError, "psi2 cannot be computed for this kernel" return psi2 - def update_gradients_variational(self, dL_dKmm, dL_dpsi0, dL_dpsi1, dL_dpsi2, mu, S, Z): + def update_gradients_variational(self, dL_dKmm, dL_dpsi0, dL_dpsi1, dL_dpsi2, variational_posterior, Z): from white import White from rbf import RBF #from rbf_inv import RBFInv diff --git a/GPy/kern/_src/static.py b/GPy/kern/_src/static.py index 757a9054..49306848 100644 --- a/GPy/kern/_src/static.py +++ b/GPy/kern/_src/static.py @@ -18,26 +18,26 @@ class Static(Kern): ret[:] = self.variance return ret - def gradients_X(self, dL_dK, X, X2, target): + def gradients_X(self, dL_dK, X, X2=None): return np.zeros(X.shape) - def gradients_X_diag(self, dL_dKdiag, X, target): + def gradients_X_diag(self, dL_dKdiag, X): return np.zeros(X.shape) - def gradients_Z_variational(self, dL_dKmm, dL_dpsi0, dL_dpsi1, dL_dpsi2, mu, S, Z): + def gradients_Z_variational(self, dL_dKmm, dL_dpsi0, dL_dpsi1, dL_dpsi2, Z, variational_posterior): return np.zeros(Z.shape) - def gradients_muS_variational(self, dL_dKmm, dL_dpsi0, dL_dpsi1, dL_dpsi2, mu, S, Z): - return np.zeros(mu.shape), np.zeros(S.shape) + def gradients_muS_variational(self, dL_dKmm, dL_dpsi0, dL_dpsi1, dL_dpsi2, Z, variational_posterior): + return np.zeros(variational_posterior.shape), np.zeros(variational_posterior.shape) - def psi0(self, Z, mu, S): - return self.Kdiag(mu) + def psi0(self, Z, variational_posterior): + return self.Kdiag(variational_posterior.mean) - def psi1(self, Z, mu, S, target): - return self.K(mu, Z) + def psi1(self, Z, variational_posterior): + return self.K(variational_posterior.mean, Z) - def psi2(Z, mu, S): - K = self.K(mu, Z) + def psi2(self, Z, variational_posterior): + K = self.K(variational_posterior.mean, Z) return K[:,:,None]*K[:,None,:] # NB. more efficient implementations on inherriting classes @@ -51,8 +51,8 @@ class White(Static): else: return np.zeros((X.shape[0], X2.shape[0])) - def psi2(self, Z, mu, S, target): - return np.zeros((mu.shape[0], Z.shape[0], Z.shape[0]), dtype=np.float64) + def psi2(self, Z, variational_posterior): + return np.zeros((variational_posterior.shape[0], Z.shape[0], Z.shape[0]), dtype=np.float64) def update_gradients_full(self, dL_dK, X): self.variance.gradient = np.trace(dL_dK) @@ -60,7 +60,7 @@ class White(Static): def update_gradients_diag(self, dL_dKdiag, X): self.variance.gradient = dL_dKdiag.sum() - def update_gradients_variational(self, dL_dKmm, dL_dpsi0, dL_dpsi1, dL_dpsi2, mu, S, Z): + def update_gradients_variational(self, dL_dKmm, dL_dpsi0, dL_dpsi1, dL_dpsi2, Z, variational_posterior): self.variance.gradient = np.trace(dL_dKmm) + dL_dpsi0.sum() @@ -80,11 +80,11 @@ class Bias(Static): def update_gradients_diag(self, dL_dKdiag, X): self.variance.gradient = dL_dK.sum() - def psi2(self, Z, mu, S, target): + def psi2(self, Z, variational_posterior): ret = np.empty((mu.shape[0], Z.shape[0], Z.shape[0]), dtype=np.float64) ret[:] = self.variance**2 return ret - def update_gradients_variational(self, dL_dKmm, dL_dpsi0, dL_dpsi1, dL_dpsi2, mu, S, Z): + def update_gradients_variational(self, dL_dKmm, dL_dpsi0, dL_dpsi1, dL_dpsi2, Z, variational_posterior): self.variance.gradient = dL_dKmm.sum() + dL_dpsi0.sum() + dL_dpsi1.sum() + 2.*self.variance*dL_dpsi2.sum() diff --git a/GPy/testing/bgplvm_tests.py b/GPy/testing/bgplvm_tests.py index 1192448a..fd55d314 100644 --- a/GPy/testing/bgplvm_tests.py +++ b/GPy/testing/bgplvm_tests.py @@ -10,11 +10,11 @@ class BGPLVMTests(unittest.TestCase): def test_bias_kern(self): N, num_inducing, input_dim, D = 10, 3, 2, 4 X = np.random.rand(N, input_dim) - k = GPy.kern.rbf(input_dim) + GPy.kern.white(input_dim, 0.00001) + k = GPy.kern.RBF(input_dim) + GPy.kern.White(input_dim, 0.00001) K = k.K(X) Y = np.random.multivariate_normal(np.zeros(N),K,input_dim).T Y -= Y.mean(axis=0) - k = GPy.kern.bias(input_dim) + GPy.kern.white(input_dim, 0.00001) + k = GPy.kern.bias(input_dim) + GPy.kern.White(input_dim, 0.00001) m = BayesianGPLVM(Y, input_dim, kernel=k, num_inducing=num_inducing) m.randomize() self.assertTrue(m.checkgrad()) @@ -22,11 +22,11 @@ class BGPLVMTests(unittest.TestCase): def test_linear_kern(self): N, num_inducing, input_dim, D = 10, 3, 2, 4 X = np.random.rand(N, input_dim) - k = GPy.kern.rbf(input_dim) + GPy.kern.white(input_dim, 0.00001) + k = GPy.kern.RBF(input_dim) + GPy.kern.White(input_dim, 0.00001) K = k.K(X) Y = np.random.multivariate_normal(np.zeros(N),K,input_dim).T Y -= Y.mean(axis=0) - k = GPy.kern.linear(input_dim) + GPy.kern.white(input_dim, 0.00001) + k = GPy.kern.Linear(input_dim) + GPy.kern.White(input_dim, 0.00001) m = BayesianGPLVM(Y, input_dim, kernel=k, num_inducing=num_inducing) m.randomize() self.assertTrue(m.checkgrad()) @@ -34,11 +34,11 @@ class BGPLVMTests(unittest.TestCase): def test_rbf_kern(self): N, num_inducing, input_dim, D = 10, 3, 2, 4 X = np.random.rand(N, input_dim) - k = GPy.kern.rbf(input_dim) + GPy.kern.white(input_dim, 0.00001) + k = GPy.kern.RBF(input_dim) + GPy.kern.White(input_dim, 0.00001) K = k.K(X) Y = np.random.multivariate_normal(np.zeros(N),K,input_dim).T Y -= Y.mean(axis=0) - k = GPy.kern.rbf(input_dim) + GPy.kern.white(input_dim, 0.00001) + k = GPy.kern.RBF(input_dim) + GPy.kern.White(input_dim, 0.00001) m = BayesianGPLVM(Y, input_dim, kernel=k, num_inducing=num_inducing) m.randomize() self.assertTrue(m.checkgrad()) @@ -46,11 +46,11 @@ class BGPLVMTests(unittest.TestCase): def test_rbf_bias_kern(self): N, num_inducing, input_dim, D = 10, 3, 2, 4 X = np.random.rand(N, input_dim) - k = GPy.kern.rbf(input_dim) + GPy.kern.bias(input_dim) + GPy.kern.white(input_dim, 0.00001) + k = GPy.kern.RBF(input_dim) + GPy.kern.Bias(input_dim) + GPy.kern.White(input_dim, 0.00001) K = k.K(X) Y = np.random.multivariate_normal(np.zeros(N),K,input_dim).T Y -= Y.mean(axis=0) - k = GPy.kern.rbf(input_dim) + GPy.kern.bias(input_dim) + GPy.kern.white(input_dim, 0.00001) + k = GPy.kern.RBF(input_dim) + GPy.kern.Bias(input_dim) + GPy.kern.White(input_dim, 0.00001) m = BayesianGPLVM(Y, input_dim, kernel=k, num_inducing=num_inducing) m.randomize() self.assertTrue(m.checkgrad()) @@ -58,11 +58,11 @@ class BGPLVMTests(unittest.TestCase): def test_rbf_line_kern(self): N, num_inducing, input_dim, D = 10, 3, 2, 4 X = np.random.rand(N, input_dim) - k = GPy.kern.rbf(input_dim) + GPy.kern.linear(input_dim) + GPy.kern.white(input_dim, 0.00001) + k = GPy.kern.RBF(input_dim) + GPy.kern.Linear(input_dim) + GPy.kern.White(input_dim, 0.00001) K = k.K(X) Y = np.random.multivariate_normal(np.zeros(N),K,input_dim).T Y -= Y.mean(axis=0) - k = GPy.kern.rbf(input_dim) + GPy.kern.bias(input_dim) + GPy.kern.white(input_dim, 0.00001) + k = GPy.kern.RBF(input_dim) + GPy.kern.Bias(input_dim) + GPy.kern.White(input_dim, 0.00001) m = BayesianGPLVM(Y, input_dim, kernel=k, num_inducing=num_inducing) m.randomize() self.assertTrue(m.checkgrad()) @@ -70,11 +70,11 @@ class BGPLVMTests(unittest.TestCase): def test_linear_bias_kern(self): N, num_inducing, input_dim, D = 30, 5, 4, 30 X = np.random.rand(N, input_dim) - k = GPy.kern.linear(input_dim) + GPy.kern.bias(input_dim) + GPy.kern.white(input_dim, 0.00001) + k = GPy.kern.Linear(input_dim) + GPy.kern.Bias(input_dim) + GPy.kern.White(input_dim, 0.00001) K = k.K(X) Y = np.random.multivariate_normal(np.zeros(N),K,input_dim).T Y -= Y.mean(axis=0) - k = GPy.kern.linear(input_dim) + GPy.kern.bias(input_dim) + GPy.kern.white(input_dim, 0.00001) + k = GPy.kern.Linear(input_dim) + GPy.kern.Bias(input_dim) + GPy.kern.White(input_dim, 0.00001) m = BayesianGPLVM(Y, input_dim, kernel=k, num_inducing=num_inducing) m.randomize() self.assertTrue(m.checkgrad()) diff --git a/GPy/testing/gplvm_tests.py b/GPy/testing/gplvm_tests.py index 6223d833..a605a96c 100644 --- a/GPy/testing/gplvm_tests.py +++ b/GPy/testing/gplvm_tests.py @@ -9,10 +9,10 @@ class GPLVMTests(unittest.TestCase): def test_bias_kern(self): num_data, num_inducing, input_dim, output_dim = 10, 3, 2, 4 X = np.random.rand(num_data, input_dim) - k = GPy.kern.rbf(input_dim) + GPy.kern.white(input_dim, 0.00001) + k = GPy.kern.RBF(input_dim) + GPy.kern.White(input_dim, 0.00001) K = k.K(X) Y = np.random.multivariate_normal(np.zeros(num_data),K,output_dim).T - k = GPy.kern.bias(input_dim) + GPy.kern.white(input_dim, 0.00001) + k = GPy.kern.Bias(input_dim) + GPy.kern.White(input_dim, 0.00001) m = GPy.models.GPLVM(Y, input_dim, kernel = k) m.randomize() self.assertTrue(m.checkgrad()) @@ -20,10 +20,10 @@ class GPLVMTests(unittest.TestCase): def test_linear_kern(self): num_data, num_inducing, input_dim, output_dim = 10, 3, 2, 4 X = np.random.rand(num_data, input_dim) - k = GPy.kern.rbf(input_dim) + GPy.kern.white(input_dim, 0.00001) + k = GPy.kern.RBF(input_dim) + GPy.kern.White(input_dim, 0.00001) K = k.K(X) Y = np.random.multivariate_normal(np.zeros(num_data),K,output_dim).T - k = GPy.kern.linear(input_dim) + GPy.kern.white(input_dim, 0.00001) + k = GPy.kern.Linear(input_dim) + GPy.kern.White(input_dim, 0.00001) m = GPy.models.GPLVM(Y, input_dim, kernel = k) m.randomize() self.assertTrue(m.checkgrad()) @@ -31,10 +31,10 @@ class GPLVMTests(unittest.TestCase): def test_rbf_kern(self): num_data, num_inducing, input_dim, output_dim = 10, 3, 2, 4 X = np.random.rand(num_data, input_dim) - k = GPy.kern.rbf(input_dim) + GPy.kern.white(input_dim, 0.00001) + k = GPy.kern.RBF(input_dim) + GPy.kern.White(input_dim, 0.00001) K = k.K(X) Y = np.random.multivariate_normal(np.zeros(num_data),K,output_dim).T - k = GPy.kern.rbf(input_dim) + GPy.kern.white(input_dim, 0.00001) + k = GPy.kern.RBF(input_dim) + GPy.kern.White(input_dim, 0.00001) m = GPy.models.GPLVM(Y, input_dim, kernel = k) m.randomize() self.assertTrue(m.checkgrad()) diff --git a/GPy/testing/bcgplvm_tests.py b/GPy/testing/old_tests/bcgplvm_tests.py similarity index 100% rename from GPy/testing/bcgplvm_tests.py rename to GPy/testing/old_tests/bcgplvm_tests.py diff --git a/GPy/testing/cgd_tests.py b/GPy/testing/old_tests/cgd_tests.py similarity index 94% rename from GPy/testing/cgd_tests.py rename to GPy/testing/old_tests/cgd_tests.py index 82041c9f..c2653ea5 100644 --- a/GPy/testing/cgd_tests.py +++ b/GPy/testing/old_tests/cgd_tests.py @@ -5,10 +5,10 @@ Created on 26 Apr 2013 ''' import unittest import numpy -from GPy.inference.conjugate_gradient_descent import CGD, RUNNING +from GPy.inference.optimization.conjugate_gradient_descent import CGD, RUNNING import pylab from scipy.optimize.optimize import rosen, rosen_der -from GPy.inference.gradient_descent_update_rules import PolakRibiere +from GPy.inference.optimization.gradient_descent_update_rules import PolakRibiere class Test(unittest.TestCase): @@ -30,7 +30,7 @@ class Test(unittest.TestCase): assert numpy.allclose(res[0], 0, atol=1e-5) break except AssertionError: - import ipdb;ipdb.set_trace() + import pdb;pdb.set_trace() # RESTART pass else: @@ -108,4 +108,3 @@ if __name__ == "__main__": res[0] = opt.opt(f, df, x0.copy(), callback, messages=True, maxiter=1000, report_every=7, gtol=1e-12, update_rule=PolakRibiere) - pass