mirror of
https://github.com/SheffieldML/GPy.git
synced 2026-05-02 16:22:39 +02:00
fixed bug in kernel_tests for gradients_XX
This commit is contained in:
parent
401bfbf20c
commit
1cf77c1051
3 changed files with 4 additions and 99 deletions
|
|
@ -120,25 +120,8 @@ class Kern_check_d2K_dXdX_cov(Kern_check_model):
|
|||
grads = self.kernel.gradients_XX(self.dL_dK, self.X, self.X2, cov=True)
|
||||
self.X.gradient[:] = grads.sum(-1).sum(1)
|
||||
|
||||
class Kern_check_d2K_dXdX_no_cov(Kern_check_model):
|
||||
"""This class allows gradient checks for the secondderivative of a kernel with respect to X. """
|
||||
def __init__(self, kernel=None, dL_dK=None, X=None, X2=None):
|
||||
Kern_check_model.__init__(self,kernel=kernel,dL_dK=dL_dK, X=X, X2=X2)
|
||||
self.X = Param('X',X)
|
||||
self.link_parameter(self.X)
|
||||
|
||||
def log_likelihood(self):
|
||||
return np.sum(self.kernel.gradients_X(self.dL_dK,self.X, self.X2))
|
||||
|
||||
def parameters_changed(self):
|
||||
#if self.kernel.name == 'rbf':
|
||||
# import ipdb;ipdb.set_trace()
|
||||
grads = self.kernel.gradients_XX(self.dL_dK, self.X, self.X2, cov=False)
|
||||
self.X.gradient[:] = grads.sum(1)
|
||||
|
||||
|
||||
class Kern_check_d2Kdiag_dXdX_cov(Kern_check_model):
|
||||
"""This class allows gradient checks for the secondderivative of a kernel with respect to X. """
|
||||
"""This class allows gradient checks for the second derivative of a kernel with respect to X. """
|
||||
def __init__(self, kernel=None, dL_dK=None, X=None, X2=None):
|
||||
Kern_check_model.__init__(self,kernel=kernel,dL_dK=dL_dK, X=X, X2=X2)
|
||||
self.X = Param('X',X)
|
||||
|
|
@ -151,23 +134,6 @@ class Kern_check_d2Kdiag_dXdX_cov(Kern_check_model):
|
|||
grads = self.kernel.gradients_XX_diag(self.dL_dK.diagonal(), self.X, cov=True)
|
||||
self.X.gradient[:] = grads.sum(-1)
|
||||
|
||||
class Kern_check_d2Kdiag_dXdX_no_cov(Kern_check_model):
|
||||
"""This class allows gradient checks for the secondderivative of a kernel with respect to X. """
|
||||
def __init__(self, kernel=None, dL_dK=None, X=None, X2=None):
|
||||
Kern_check_model.__init__(self,kernel=kernel,dL_dK=dL_dK, X=X, X2=X2)
|
||||
self.X = Param('X',X)
|
||||
self.link_parameter(self.X)
|
||||
|
||||
def log_likelihood(self):
|
||||
return np.sum(self.kernel.gradients_X_diag(self.dL_dK.diagonal(),self.X))
|
||||
|
||||
def parameters_changed(self):
|
||||
grads = self.kernel.gradients_XX_diag(self.dL_dK.diagonal(), self.X, cov=False)
|
||||
self.X.gradient[:] = grads
|
||||
|
||||
# class Kern_check_d2Kdiag_dXdX(Kern_check_model):
|
||||
# """This class allows gradient checks for the secondderivative of a kernel diagonal with respect to X. """
|
||||
|
||||
def check_kernel_gradient_functions(kern, X=None, X2=None, output_ind=None, verbose=False, fixed_X_dims=None):
|
||||
"""
|
||||
This function runs on kernels to check the correctness of their
|
||||
|
|
@ -304,46 +270,6 @@ def check_kernel_gradient_functions(kern, X=None, X2=None, output_ind=None, verb
|
|||
assert(result)
|
||||
return False
|
||||
|
||||
if verbose:
|
||||
print("Checking gradients of dK(X, X) wrt X.")
|
||||
try:
|
||||
testmodel = Kern_check_d2K_dXdX_no_cov(kern, X=X, X2=None)
|
||||
if fixed_X_dims is not None:
|
||||
testmodel.X[:,fixed_X_dims].fix()
|
||||
result = testmodel.checkgrad(verbose=verbose)
|
||||
except NotImplementedError:
|
||||
result=True
|
||||
if verbose:
|
||||
print(("gradients_X not implemented for " + kern.name))
|
||||
if result and verbose:
|
||||
print("Check passed.")
|
||||
if not result:
|
||||
print(("Gradient of dK(X, X) wrt X failed for " + kern.name + " covariance function. Gradient values as follows:"))
|
||||
testmodel.checkgrad(verbose=True)
|
||||
assert(result)
|
||||
pass_checks = False
|
||||
return False
|
||||
|
||||
if verbose:
|
||||
print("Checking gradients of dK(X, X2) wrt X.")
|
||||
try:
|
||||
testmodel = Kern_check_d2K_dXdX_no_cov(kern, X=X, X2=X2)
|
||||
if fixed_X_dims is not None:
|
||||
testmodel.X[:,fixed_X_dims].fix()
|
||||
result = testmodel.checkgrad(verbose=verbose)
|
||||
except NotImplementedError:
|
||||
result=True
|
||||
if verbose:
|
||||
print(("gradients_X not implemented for " + kern.name))
|
||||
if result and verbose:
|
||||
print("Check passed.")
|
||||
if not result:
|
||||
print(("Gradient of dK(X, X2) wrt X failed for " + kern.name + " covariance function. Gradient values as follows:"))
|
||||
testmodel.checkgrad(verbose=True)
|
||||
assert(result)
|
||||
pass_checks = False
|
||||
return False
|
||||
|
||||
if verbose:
|
||||
print("Checking gradients of dK(X, X) wrt X with full cov in dimensions")
|
||||
try:
|
||||
|
|
@ -384,27 +310,6 @@ def check_kernel_gradient_functions(kern, X=None, X2=None, output_ind=None, verb
|
|||
pass_checks = False
|
||||
return False
|
||||
|
||||
|
||||
if verbose:
|
||||
print("Checking gradients of dKdiag(X, X) wrt X.")
|
||||
try:
|
||||
testmodel = Kern_check_d2Kdiag_dXdX_no_cov(kern, X=X, X2=None)
|
||||
if fixed_X_dims is not None:
|
||||
testmodel.X[:,fixed_X_dims].fix()
|
||||
result = testmodel.checkgrad(verbose=verbose)
|
||||
except NotImplementedError:
|
||||
result=True
|
||||
if verbose:
|
||||
print(("gradients_X not implemented for " + kern.name))
|
||||
if result and verbose:
|
||||
print("Check passed.")
|
||||
if not result:
|
||||
print(("Gradient of dKdiag(X, X) wrt X failed for " + kern.name + " covariance function. Gradient values as follows:"))
|
||||
testmodel.checkgrad(verbose=True)
|
||||
assert(result)
|
||||
pass_checks = False
|
||||
return False
|
||||
|
||||
if verbose:
|
||||
print("Checking gradients of dKdiag(X, X) wrt X with cov in dimensions")
|
||||
try:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue