mirror of
https://github.com/SheffieldML/GPy.git
synced 2026-05-09 03:52:39 +02:00
derivatives of likelihood things now working for svgp
This commit is contained in:
parent
611febe7eb
commit
53081c704d
3 changed files with 10 additions and 3 deletions
|
|
@ -47,6 +47,8 @@ class SVGP(LatentFunctionInference):
|
||||||
|
|
||||||
#rescale the F term if working on a batch
|
#rescale the F term if working on a batch
|
||||||
F, dF_dmu, dF_dv = F*batch_scale, dF_dmu*batch_scale, dF_dv*batch_scale
|
F, dF_dmu, dF_dv = F*batch_scale, dF_dmu*batch_scale, dF_dv*batch_scale
|
||||||
|
if dF_dthetaL is not None:
|
||||||
|
dF_dthetaL = dF_dthetaL.sum(1)*batch_scale
|
||||||
|
|
||||||
#derivatives of expected likelihood
|
#derivatives of expected likelihood
|
||||||
Adv = A.T[:,:,None]*dF_dv[None,:,:] # As if dF_Dv is diagonal
|
Adv = A.T[:,:,None]*dF_dv[None,:,:] # As if dF_Dv is diagonal
|
||||||
|
|
|
||||||
|
|
@ -177,7 +177,11 @@ class Likelihood(Parameterized):
|
||||||
if np.any(np.isnan(dF_dm)) or np.any(np.isinf(dF_dm)):
|
if np.any(np.isnan(dF_dm)) or np.any(np.isinf(dF_dm)):
|
||||||
stop
|
stop
|
||||||
|
|
||||||
dF_dtheta = None # Not yet implemented
|
if self.size:
|
||||||
|
dF_dtheta = self.dlogpdf_dtheta(X, Y[:,None]) # Ntheta x (orig size) x N_{quad_points}
|
||||||
|
dF_dtheta = np.dot(dF_dtheta, gh_w)
|
||||||
|
else:
|
||||||
|
dF_dtheta = None # Not yet implemented
|
||||||
return F.reshape(*shape), dF_dm.reshape(*shape), dF_dv.reshape(*shape), dF_dtheta
|
return F.reshape(*shape), dF_dm.reshape(*shape), dF_dv.reshape(*shape), dF_dtheta
|
||||||
|
|
||||||
def predictive_mean(self, mu, variance, Y_metadata=None):
|
def predictive_mean(self, mu, variance, Y_metadata=None):
|
||||||
|
|
|
||||||
|
|
@ -180,7 +180,8 @@ class StudentT(Likelihood):
|
||||||
:rtype: float
|
:rtype: float
|
||||||
"""
|
"""
|
||||||
e = y - inv_link_f
|
e = y - inv_link_f
|
||||||
dlogpdf_dvar = self.v*(e**2 - self.sigma2)/(2*self.sigma2*(self.sigma2*self.v + e**2))
|
e2 = np.square(e)
|
||||||
|
dlogpdf_dvar = self.v*(e2 - self.sigma2)/(2*self.sigma2*(self.sigma2*self.v + e2))
|
||||||
return dlogpdf_dvar
|
return dlogpdf_dvar
|
||||||
|
|
||||||
def dlogpdf_dlink_dvar(self, inv_link_f, y, Y_metadata=None):
|
def dlogpdf_dlink_dvar(self, inv_link_f, y, Y_metadata=None):
|
||||||
|
|
@ -226,7 +227,7 @@ class StudentT(Likelihood):
|
||||||
def dlogpdf_link_dtheta(self, f, y, Y_metadata=None):
|
def dlogpdf_link_dtheta(self, f, y, Y_metadata=None):
|
||||||
dlogpdf_dvar = self.dlogpdf_link_dvar(f, y, Y_metadata=Y_metadata)
|
dlogpdf_dvar = self.dlogpdf_link_dvar(f, y, Y_metadata=Y_metadata)
|
||||||
dlogpdf_dv = np.zeros_like(dlogpdf_dvar) #FIXME: Not done yet
|
dlogpdf_dv = np.zeros_like(dlogpdf_dvar) #FIXME: Not done yet
|
||||||
return np.hstack((dlogpdf_dvar, dlogpdf_dv))
|
return np.array((dlogpdf_dvar, dlogpdf_dv))
|
||||||
|
|
||||||
def dlogpdf_dlink_dtheta(self, f, y, Y_metadata=None):
|
def dlogpdf_dlink_dtheta(self, f, y, Y_metadata=None):
|
||||||
dlogpdf_dlink_dvar = self.dlogpdf_dlink_dvar(f, y, Y_metadata=Y_metadata)
|
dlogpdf_dlink_dvar = self.dlogpdf_dlink_dvar(f, y, Y_metadata=Y_metadata)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue