Adding gradients, shapes starting to make sense

This commit is contained in:
Alan Saul 2013-04-19 17:41:01 +01:00
parent 1420aa532c
commit 267a8e427c
4 changed files with 60 additions and 29 deletions

View file

@ -128,17 +128,17 @@ class GP(model):
For the likelihood parameters, pass in alpha = K^-1 y
"""
dL_dthetaK = self.kern.dK_dtheta(dL_dK=self.dL_dK, X=self.X, slices1=self.Xslices, slices2=self.Xslices)
if isinstance(self.likelihood, Laplace):
dL_dthetaK_explicit = self.kern.dK_dtheta(dL_dK=self.dL_dK, X=self.X, slices1=self.Xslices, slices2=self.Xslices)
dL_dthetaK_explicit = dL_dthetaK
#Need to pass in a matrix of ones to get access to raw dK_dthetaK values without being chained
fake_dL_dKs = np.ones(self.dL_dK.shape)
dK_dthetaK = self.kern.dK_dtheta(dL_dK=fake_dL_dKs, X=self.X, slices1=self.Xslices, slices2=self.Xslices)
dL_dthetaK_implicit = self.likelihood._Kgradients(self.dL_dK, dK_dthetaK)
dL_dthetaK = dL_dthetaK_explicit + dL_dthetaK_implicit
dL_dthetaL = self.likelihood._gradients(partial=np.diag(self.dL_dK))
dL_dthetaL = self.likelihood._gradients(partial=self.dL_dK)
else:
dL_dthetaK = self.kern.dK_dtheta(dL_dK=self.dL_dK, X=self.X, slices1=self.Xslices, slices2=self.Xslices)
dL_dthetaL = self.likelihood._gradients(partial=np.diag(self.dL_dK))
return np.hstack((dL_dthetaK, dL_dthetaL))