From 8e22373a00cb1daf5782fde8148c425e87388db3 Mon Sep 17 00:00:00 2001 From: Ricardo Date: Wed, 5 Mar 2014 11:32:54 +0000 Subject: [PATCH 1/2] some missing .Ks --- GPy/kern/_src/prod.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/GPy/kern/_src/prod.py b/GPy/kern/_src/prod.py index bb809356..b324eaa7 100644 --- a/GPy/kern/_src/prod.py +++ b/GPy/kern/_src/prod.py @@ -39,17 +39,17 @@ class Prod(Kern): return self.k1.Kdiag(X[:,self.slice1]) * self.k2.Kdiag(X[:,self.slice2]) def update_gradients_full(self, dL_dK, X): - self.k1.update_gradients_full(dL_dK*self.k2(X[:,self.slice2]), X[:,self.slice1]) - self.k2.update_gradients_full(dL_dK*self.k1(X[:,self.slice1]), X[:,self.slice2]) + self.k1.update_gradients_full(dL_dK*self.k2.K(X[:,self.slice2]), X[:,self.slice1]) + self.k2.update_gradients_full(dL_dK*self.k1.K(X[:,self.slice1]), X[:,self.slice2]) def gradients_X(self, dL_dK, X, X2=None): target = np.zeros(X.shape) if X2 is None: - target[:,self.slice1] += self.k1.gradients_X(dL_dK*self.k2(X[:,self.slice2]), X[:,self.slice1], None) - target[:,self.slice2] += self.k2.gradients_X(dL_dK*self.k1(X[:,self.slice1]), X[:,self.slice2], None) + target[:,self.slice1] += self.k1.gradients_X(dL_dK*self.k2.K(X[:,self.slice2]), X[:,self.slice1], None) + target[:,self.slice2] += self.k2.gradients_X(dL_dK*self.k1.K(X[:,self.slice1]), X[:,self.slice2], None) else: - target[:,self.slice1] += self.k1.gradients_X(dL_dK*self.k2(X[:,self.slice2], X2[:,self.slice2]), X[:,self.slice1], X2[:,self.slice1]) - target[:,self.slice2] += self.k2.gradients_X(dL_dK*self.k1(X[:,self.slice1], X2[:,self.slice1]), X[:,self.slice2], X2[:,self.slice2]) + target[:,self.slice1] += self.k1.gradients_X(dL_dK*self.k2.K(X[:,self.slice2], X2[:,self.slice2]), X[:,self.slice1], X2[:,self.slice1]) + target[:,self.slice2] += self.k2.gradients_X(dL_dK*self.k1.K(X[:,self.slice1], X2[:,self.slice1]), X[:,self.slice2], X2[:,self.slice2]) return target def gradients_X_diag(self, dL_dKdiag, X): From 19c87c9f77ea43e02ed34ddd7b7306d0fb94af61 Mon Sep 17 00:00:00 2001 From: Ricardo Date: Wed, 5 Mar 2014 12:52:56 +0000 Subject: [PATCH 2/2] name added as a parameter of Prod --- GPy/kern/_src/kern.py | 4 ++-- GPy/kern/_src/prod.py | 8 +++++--- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/GPy/kern/_src/kern.py b/GPy/kern/_src/kern.py index f632783b..47166156 100644 --- a/GPy/kern/_src/kern.py +++ b/GPy/kern/_src/kern.py @@ -129,7 +129,7 @@ class Kern(Parameterized): """ return self.prod(other, tensor=True) - def prod(self, other, tensor=False): + def prod(self, other, tensor=False, name=None): """ Multiply two kernels (either on the same space, or on the tensor product of the input space). @@ -142,4 +142,4 @@ class Kern(Parameterized): """ assert isinstance(other, Kern), "only kernels can be added to kernels..." from prod import Prod - return Prod(self, other, tensor) + return Prod(self, other, tensor, name) diff --git a/GPy/kern/_src/prod.py b/GPy/kern/_src/prod.py index b324eaa7..51490687 100644 --- a/GPy/kern/_src/prod.py +++ b/GPy/kern/_src/prod.py @@ -15,14 +15,16 @@ class Prod(Kern): :rtype: kernel object """ - def __init__(self, k1, k2, tensor=False): + def __init__(self, k1, k2, tensor=False,name=None): if tensor: - super(Prod, self).__init__(k1.input_dim + k2.input_dim, k1.name + '_xx_' + k2.name) + name = k1.name + '_xx_' + k2.name if name is None else name + super(Prod, self).__init__(k1.input_dim + k2.input_dim, name) self.slice1 = slice(0,k1.input_dim) self.slice2 = slice(k1.input_dim,k1.input_dim+k2.input_dim) else: assert k1.input_dim == k2.input_dim, "Error: The input spaces of the kernels to multiply don't have the same dimension." - super(Prod, self).__init__(k1.input_dim, k1.name + '_x_' + k2.name) + name = k1.name + '_x_' + k2.name if name is None else name + super(Prod, self).__init__(k1.input_dim, name) self.slice1 = slice(0, self.input_dim) self.slice2 = slice(0, self.input_dim) self.k1 = k1