weird Max related stuff is happening

This commit is contained in:
James Hensman 2014-02-20 14:24:41 +00:00
parent 41b8b7edd8
commit 87ce8fea0b
3 changed files with 9 additions and 22 deletions

View file

@ -58,6 +58,7 @@ class SparseGP(GP):
if not self.Z.is_fixed: if not self.Z.is_fixed:
if self.X_variance is None: if self.X_variance is None:
self.Z.gradient = self.kern.gradients_Z_sparse(X=self.X, Z=self.Z, **self.grad_dict) self.Z.gradient = self.kern.gradients_Z_sparse(X=self.X, Z=self.Z, **self.grad_dict)
print self.Z.gradient
else: else:
self.Z.gradient = self.kern.gradients_Z_variational(mu=self.X, S=self.X_variance, Z=self.Z, **self.grad_dict) self.Z.gradient = self.kern.gradients_Z_variational(mu=self.X, S=self.X_variance, Z=self.Z, **self.grad_dict)
print self.Z.gradient print self.Z.gradient

View file

@ -71,7 +71,7 @@ class Add(Kern):
def psi0(self, Z, mu, S): def psi0(self, Z, mu, S):
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) 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, mu, S):
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) 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)
@ -93,7 +93,7 @@ class Add(Kern):
pass pass
# rbf X bias # rbf X bias
#elif isinstance(p1, (Bias, Fixed)) and isinstance(p2, (RBF, RBFInv)): #elif isinstance(p1, (Bias, Fixed)) and isinstance(p2, (RBF, RBFInv)):
elif isinstance(p1, Bias) and isinstance(p2, (RBF, Linear))): elif isinstance(p1, Bias) and isinstance(p2, (RBF, Linear)):
tmp = p2.psi1(Z[:,i2], mu[:,i2], S[:,i2]) tmp = p2.psi1(Z[:,i2], mu[:,i2], S[:,i2])
psi2 += p1.variance * (tmp[:, :, None] + tmp[:, None, :]) psi2 += p1.variance * (tmp[:, :, None] + tmp[:, None, :])
#elif isinstance(p2, (Bias, Fixed)) and isinstance(p1, (RBF, RBFInv)): #elif isinstance(p2, (Bias, Fixed)) and isinstance(p1, (RBF, RBFInv)):

View file

@ -26,33 +26,15 @@ class Kern(Parameterized):
raise NotImplementedError raise NotImplementedError
def Kdiag(self, Xa ,target): def Kdiag(self, Xa ,target):
raise NotImplementedError raise NotImplementedError
def _param_grad_helper(self, dL_dK,X, X2, target):
raise NotImplementedError
def psi0(self,Z,mu,S,target): def psi0(self,Z,mu,S,target):
raise NotImplementedError raise NotImplementedError
def dpsi0_dtheta(self,dL_dpsi0, Z,mu,S,target):
raise NotImplementedError
def dpsi0_dmuS(self,dL_dpsi0,Z,mu,S,target_mu,target_S):
raise NotImplementedError
def psi1(self,Z,mu,S,target): def psi1(self,Z,mu,S,target):
raise NotImplementedError raise NotImplementedError
def dpsi1_dtheta(self,Z,mu,S,target):
raise NotImplementedError
def dpsi1_dZ(self,dL_dpsi1,Z,mu,S,target):
raise NotImplementedError
def dpsi1_dmuS(self,dL_dpsi1,Z,mu,S,target_mu,target_S):
raise NotImplementedError
def psi2(self,Z,mu,S,target): def psi2(self,Z,mu,S,target):
raise NotImplementedError raise NotImplementedError
def dpsi2_dZ(self,dL_dpsi2,Z,mu,S,target): def gradients_X(self, dL_dK, X, X2):
raise NotImplementedError raise NotImplementedError
def dpsi2_dtheta(self,dL_dpsi2,Z,mu,S,target): def gradients_X_diag(self, dL_dK, X):
raise NotImplementedError
def dpsi2_dmuS(self,dL_dpsi2,Z,mu,S,target_mu,target_S):
raise NotImplementedError
def gradients_X(self, dL_dK, X, X2, target):
raise NotImplementedError
def dKdiag_dX(self, dL_dK, X, target):
raise NotImplementedError raise NotImplementedError
def update_gradients_full(self, dL_dK, X): def update_gradients_full(self, dL_dK, X):
"""Set the gradients of all parameters when doing full (N) inference.""" """Set the gradients of all parameters when doing full (N) inference."""
@ -63,6 +45,10 @@ class Kern(Parameterized):
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, mu, S, Z):
"""Set the gradients of all parameters when doing variational (M) inference with uncertain inputs.""" """Set the gradients of all parameters when doing variational (M) inference with uncertain inputs."""
raise NotImplementedError raise NotImplementedError
def gradients_Z_sparse(self, dL_dKmm, dL_dKnm, dL_dKdiag, X, Z):
grad = self.gradients_X(dL_dKmm, Z)
grad += self.gradients_X(dL_dKnm.T, Z, X)
return grad
def plot_ARD(self, *args): def plot_ARD(self, *args):
"""If an ARD kernel is present, plot a bar representation using matplotlib """If an ARD kernel is present, plot a bar representation using matplotlib