From 3626154c02aa838e061efc0dc714b4f286597658 Mon Sep 17 00:00:00 2001 From: Ricardo Date: Tue, 14 May 2013 15:38:00 +0100 Subject: [PATCH 1/5] remove profile --- GPy/models/FITC.py | 61 ++++++++++++++++++++++++++-------------------- 1 file changed, 34 insertions(+), 27 deletions(-) diff --git a/GPy/models/FITC.py b/GPy/models/FITC.py index 4f9c8bdb..8006e83a 100644 --- a/GPy/models/FITC.py +++ b/GPy/models/FITC.py @@ -33,7 +33,7 @@ class FITC(sparse_GP): self.likelihood.fit_FITC(self.Kmm,self.psi1,self.psi0) self._set_params(self._get_params()) # update the GP - @profile + #@profile def _computations(self): #factor Kmm @@ -85,26 +85,27 @@ class FITC(sparse_GP): gamma_2 = mdot(self.beta_star*pHip,self.V_star) gamma_3 = self.V_star * mdot(self.V_star.T,pHip*self.beta_star).T - dA_dpsi0_1 = -0.5 * self.beta_star - dA_dpsi0 = .5 * self.V_star**2 - dC_dpsi0 = .5 *alpha - dD_dpsi0 = 0.5*mdot(self.beta_star*pHip,self.V_star)**2 - dD_dpsi1 = gamma_1 - dD_dpsi1 += -mdot(psi1beta.T,Hi,self.psi1,gamma_1) - dD_dpsi0 += -self.V_star * mdot(self.V_star.T,pHip*self.beta_star).T + dL_dpsi0 = -0.5 * self.beta_star#dA_dpsi0 + dL_dpsi0 += .5 *alpha #dC_dpsi0 + dL_dpsi0 += 0.5*mdot(self.beta_star*pHip,self.V_star)**2 - self.V_star * mdot(self.V_star.T,pHip*self.beta_star).T #dD_dpsi0 dA_dpsi1 = b_psi1_Ki dC_dpsi1 = -np.dot(psi1beta.T,LBL_inv) + dD_dpsi1 = gamma_1 + dD_dpsi1 += -mdot(psi1beta.T,Hi,self.psi1,gamma_1) + + #dL_dpsi1 = b_psi1_Ki #dA_dpsi1 + #dL_dpsi1 += -np.dot(psi1beta.T,LBL_inv) #dC_dpsi1 + #dL_dpsi1 += gamma_1 - mdot(psi1beta.T,Hi,self.psi1,gamma_1) #dD_dpsi1 - dA_dKmm = -0.5 * np.dot(Kmmipsi1,b_psi1_Ki) - dC_dKmm = -.5*Kmmi - dC_dKmm += .5*LBL_inv - dC_dKmm += mdot(LBL_inv,psi1beta,Kmmipsi1.T) - dD_dKmm = -.5 * mdot(Hi,self.psi1,gamma_1) + dL_dKmm = -0.5 * np.dot(Kmmipsi1,b_psi1_Ki) #dA_dKmm + dL_dKmm += -.5*Kmmi + .5*LBL_inv + mdot(LBL_inv,psi1beta,Kmmipsi1.T) #dC_dKmm + dL_dKmm += -.5 * mdot(Hi,self.psi1,gamma_1) #dD_dKmm + dA_dpsi0 = .5 * self.V_star**2 dA_dpsi0_theta = self.kern.dKdiag_dtheta(dA_dpsi0,X=self.X) @@ -140,6 +141,13 @@ class FITC(sparse_GP): _dD_dKmm_1 = .5*gamma_n**2 * np.dot(psin_K.T,psin_K) _dD_dKmm_2 = - gamma_n * np.dot(psin_K.T,psin_K) + _dKmm = .5*V_n**2 * np.dot(psin_K.T,psin_K) #Diag_dA_dKmm + _dKmm += .5 * alpha_n * np.dot(psin_K.T,psin_K) #Diag_dC_dKmm + _dKmm += .5*gamma_n**2 * np.dot(psin_K.T,psin_K) - gamma_n * np.dot(psin_K.T,psin_K) #Diag_dD_dKmm + _dKmm_dtheta = self.kern.dK_dtheta(_dKmm,self.Z) + + + dA_dpsi1_theta += self.kern.dK_dtheta(_dA_dpsi1,X_n[None,:],self.Z) _dC_dpsi1_dtheta += self.kern.dK_dtheta(_dC_dpsi1,X_n[None,:],self.Z) _dD_dpsi1_dtheta_1 += self.kern.dK_dtheta(_dD_dpsi1_1,X_n[None,:],self.Z) @@ -162,23 +170,20 @@ class FITC(sparse_GP): - dA_dX_1 = self.kern.dK_dX(dA_dpsi1.T,self.Z,self.X) + 2. * self.kern.dK_dX(dA_dKmm,X=self.Z) - dA_dtheta_1 = self.kern.dKdiag_dtheta(dA_dpsi0_1,X=self.X) + self.kern.dK_dtheta(dA_dpsi1,self.X,self.Z) + self.kern.dK_dtheta(dA_dKmm,X=self.Z) - - dA_dtheta_2 = dA_dpsi0_theta + dA_dpsi1_theta + dA_dKmm_theta - dA_dX_2 = dA_dpsi1_X + dA_dKmm_X - - self.dA_dtheta = dA_dtheta_1 + dA_dtheta_2 - self.dA_dX = dA_dX_1 + dA_dX_2 - self.dlogB_dtheta = self.kern.dK_dtheta(dC_dKmm,self.Z) + self.kern.dK_dtheta(dC_dpsi1,self.X,self.Z) + self.kern.dKdiag_dtheta(dC_dpsi0,self.X) + _dC_dpsi1_dtheta + _dC_dKmm_dtheta - self.dlogB_dX = 2.*self.kern.dK_dX(dC_dKmm,self.Z) + self.kern.dK_dX(dC_dpsi1.T,self.Z,self.X) + _dC_dpsi1_dX + _dC_dKmm_dX + self._dL_dtheta = self.kern.dKdiag_dtheta(dL_dpsi0,self.X) + self._dL_dtheta += self.kern.dK_dtheta(dA_dpsi1 + dC_dpsi1 + dD_dpsi1,self.X,self.Z) + self._dL_dtheta += self.kern.dK_dtheta(dL_dKmm,X=self.Z) + self._dL_dtheta += dA_dpsi0_theta + self._dL_dtheta += dA_dKmm_theta + _dC_dKmm_dtheta + _dD_dKmm_dtheta_1 + _dD_dKmm_dtheta_2 + self._dL_dtheta += dA_dpsi1_theta + _dC_dpsi1_dtheta + _dD_dpsi1_dtheta_2 + _dD_dpsi1_dtheta_1 - self.dD_dtheta = self.kern.dKdiag_dtheta(dD_dpsi0,self.X) + self.kern.dK_dtheta(dD_dKmm,self.Z) + self.kern.dK_dtheta(dD_dpsi1,self.X,self.Z) + _dD_dpsi1_dtheta_2 + _dD_dKmm_dtheta_2 + _dD_dpsi1_dtheta_1 + _dD_dKmm_dtheta_1 - self.dD_dX = 2.*self.kern.dK_dX(dD_dKmm,self.Z) + self.kern.dK_dX(dD_dpsi1.T,self.Z,self.X) + _dD_dpsi1_dX_2 + _dD_dKmm_dX_2 + _dD_dpsi1_dX_1 + _dD_dKmm_dX_1 + self._dL_dX = self.kern.dK_dX(dA_dpsi1.T,self.Z,self.X) + self.kern.dK_dX(dC_dpsi1.T,self.Z,self.X) + self.kern.dK_dX(dD_dpsi1.T,self.Z,self.X) + self._dL_dX += 2. * self.kern.dK_dX(dL_dKmm,X=self.Z) + self._dL_dX += dA_dpsi1_X + dA_dKmm_X + _dC_dpsi1_dX + _dC_dKmm_dX + _dD_dpsi1_dX_2 + _dD_dKmm_dX_2 + _dD_dpsi1_dX_1 + _dD_dKmm_dX_1 @@ -228,14 +233,16 @@ class FITC(sparse_GP): if self.has_uncertain_inputs: raise NotImplementedError, "FITC approximation not implemented for uncertain inputs" else: - dL_dtheta = self.dA_dtheta + self.dlogB_dtheta + self.dD_dtheta + #dL_dtheta = self.dA_dtheta + self.dlogB_dtheta + self.dD_dtheta + dL_dtheta = self._dL_dtheta #FIXME return dL_dtheta def dL_dZ(self): if self.has_uncertain_inputs: raise NotImplementedError, "FITC approximation not implemented for uncertain inputs" else: - dL_dZ = self.dA_dX + self.dlogB_dX + self.dD_dX + #dL_dZ = self.dA_dX + self.dlogB_dX + self.dD_dX + dL_dZ = self._dL_dX #FIXME return dL_dZ def _raw_predict(self, Xnew, which_parts, full_cov=False): From a88eadbb35e9c45fa934f54a023f4e8f4974f077 Mon Sep 17 00:00:00 2001 From: Teo de Campos Date: Tue, 14 May 2013 17:35:16 +0100 Subject: [PATCH 2/5] image_show() is now able to use a palette to map quantized images to their original color. This uses PIL (import Image). I also enabled the image to be normalised from 0 to 255 in a more robust way (before this, it was assuming images ranged from 0 to 1). --- GPy/util/visualize.py | 45 ++++++++++++++++++++++++++++--------------- 1 file changed, 30 insertions(+), 15 deletions(-) diff --git a/GPy/util/visualize.py b/GPy/util/visualize.py index bd5f112f..5696cb1b 100644 --- a/GPy/util/visualize.py +++ b/GPy/util/visualize.py @@ -4,6 +4,7 @@ import GPy import numpy as np import matplotlib as mpl import time +import Image class data_show: """ @@ -191,38 +192,52 @@ class lvm_dimselect(lvm): - - - - class image_show(data_show): """Show a data vector as an image.""" - def __init__(self, vals, axes=None, dimensions=(16,16), transpose=False, invert=False, scale=False): + def __init__(self, vals, axes=None, dimensions=(16,16), transpose=False, invert=False, scale=False, palette=[], presetMean = 0., presetSTD = -1., selectImage = 0): data_show.__init__(self, vals, axes) self.dimensions = dimensions self.transpose = transpose self.invert = invert self.scale = scale - self.set_image(vals/255.) - self.handle = self.axes.imshow(self.vals, cmap=plt.cm.gray, interpolation='nearest') + self.palette = palette + self.presetMean = presetMean + self.presetSTD = presetSTD + self.selectImage = selectImage # This is used when the y vector contains multiple images concatenated. + + self.set_image(vals) + if not self.palette == []: # Can just show the image (self.set_image() took care of setting the palette) + self.handle = self.axes.imshow(self.vals, interpolation='nearest') + else: # Use a boring gray map. + self.handle = self.axes.imshow(self.vals, cmap=plt.cm.gray, interpolation='nearest') plt.show() def modify(self, vals): - self.set_image(vals/255.) - #self.handle.remove() - #self.handle = self.axes.imshow(self.vals) + self.set_image(vals) self.handle.set_array(self.vals) - #self.axes.figure.canvas.draw() - plt.show() + self.axes.figure.canvas.draw() # Teo - original line: plt.show() def set_image(self, vals): - self.vals = np.reshape(vals, self.dimensions, order='F') + dim = self.dimensions[0] * self.dimensions[1] + self.vals = np.reshape(vals[0,dim*self.selectImage+np.array(range(dim))], self.dimensions, order='F') if self.transpose: self.vals = self.vals.T if not self.scale: self.vals = self.vals - #if self.invert: - # self.vals = -self.vals + if self.invert: + self.vals = -self.vals + + # un-normalizing, for visualisation purposes: + if self.presetSTD >= 0: # The Mean is assumed to be in the range (0,255) + self.vals = self.vals*self.presetSTD + self.presetMean + # Clipping the values: + self.vals[self.vals < 0] = 0 + self.vals[self.vals > 255] = 255 + else: + self.vals = 255*(self.vals - self.vals.min())/(self.vals.max() - self.vals.min()) + if not self.palette == []: # applying using an image palette (e.g. if the image has been quantized) + self.vals = Image.fromarray(self.vals.astype('uint8')) + self.vals.putpalette(self.palette) # palette is a list, must be loaded before calling this function class mocap_data_show(data_show): From adc3a7522a65c736c32203a26677a759f45ab480 Mon Sep 17 00:00:00 2001 From: Ricardo Date: Tue, 14 May 2013 17:46:58 +0100 Subject: [PATCH 3/5] Speeding up FITC --- GPy/models/FITC.py | 140 ++++++++++++++++++++------------------------- 1 file changed, 62 insertions(+), 78 deletions(-) diff --git a/GPy/models/FITC.py b/GPy/models/FITC.py index 8006e83a..95cf1352 100644 --- a/GPy/models/FITC.py +++ b/GPy/models/FITC.py @@ -86,105 +86,89 @@ class FITC(sparse_GP): gamma_3 = self.V_star * mdot(self.V_star.T,pHip*self.beta_star).T + self._dL_dpsi0 = .5 * self.V_star**2 #dA_psi0???? + self._dL_dpsi0 += -0.5 * self.beta_star#dA_dpsi0 + self._dL_dpsi0 += .5 *alpha #dC_dpsi0 + self._dL_dpsi0 += 0.5*mdot(self.beta_star*pHip,self.V_star)**2 - self.V_star * mdot(self.V_star.T,pHip*self.beta_star).T #dD_dpsi0 - dL_dpsi0 = -0.5 * self.beta_star#dA_dpsi0 - dL_dpsi0 += .5 *alpha #dC_dpsi0 - dL_dpsi0 += 0.5*mdot(self.beta_star*pHip,self.V_star)**2 - self.V_star * mdot(self.V_star.T,pHip*self.beta_star).T #dD_dpsi0 - - dA_dpsi1 = b_psi1_Ki - dC_dpsi1 = -np.dot(psi1beta.T,LBL_inv) - dD_dpsi1 = gamma_1 - dD_dpsi1 += -mdot(psi1beta.T,Hi,self.psi1,gamma_1) - - #dL_dpsi1 = b_psi1_Ki #dA_dpsi1 - #dL_dpsi1 += -np.dot(psi1beta.T,LBL_inv) #dC_dpsi1 - #dL_dpsi1 += gamma_1 - mdot(psi1beta.T,Hi,self.psi1,gamma_1) #dD_dpsi1 - - - dL_dKmm = -0.5 * np.dot(Kmmipsi1,b_psi1_Ki) #dA_dKmm - dL_dKmm += -.5*Kmmi + .5*LBL_inv + mdot(LBL_inv,psi1beta,Kmmipsi1.T) #dC_dKmm - dL_dKmm += -.5 * mdot(Hi,self.psi1,gamma_1) #dD_dKmm - - dA_dpsi0 = .5 * self.V_star**2 - dA_dpsi0_theta = self.kern.dKdiag_dtheta(dA_dpsi0,X=self.X) - - - dA_dpsi1_theta = 0 - dA_dpsi1_X = 0 - dA_dKmm_theta = 0 - dA_dKmm_X = 0 - _dC_dpsi1_dtheta = 0 - _dC_dpsi1_dX = 0 - _dC_dKmm_dtheta = 0 - _dC_dKmm_dX = 0 - _dD_dpsi1_dtheta_1 = 0 - _dD_dpsi1_dX_1 = 0 - _dD_dKmm_dtheta_1 = 0 - _dD_dKmm_dX_1 = 0 - _dD_dpsi1_dtheta_2 = 0 - _dD_dpsi1_dX_2 = 0 - _dD_dKmm_dtheta_2 = 0 - _dD_dKmm_dX_2 = 0 + self._dL_dpsi1 = b_psi1_Ki.copy() #dA_dpsi1 + self._dL_dpsi1 += -np.dot(psi1beta.T,LBL_inv) #dC_dpsi1 + self._dL_dpsi1 += gamma_1 - mdot(psi1beta.T,Hi,self.psi1,gamma_1) #dD_dpsi1 + self._dL_dKmm = -0.5 * np.dot(Kmmipsi1,b_psi1_Ki) #dA_dKmm + self._dL_dKmm += -.5*Kmmi + .5*LBL_inv + mdot(LBL_inv,psi1beta,Kmmipsi1.T) #dC_dKmm + self._dL_dKmm += -.5 * mdot(Hi,self.psi1,gamma_1) #dD_dKmm + _dpsi1_dtheta = 0 + _dpsi1_dX = 0 + _dKmm_dtheta = 0 + _dKmm_dX = 0 for psi1_n,V_n,X_n,alpha_n,gamma_n,gamma_k in zip(self.psi1.T,self.V_star,self.X,alpha,gamma_2,gamma_3): psin_K = np.dot(psi1_n[None,:],Kmmi) - _dA_dpsi1 = -V_n**2 * np.dot(psi1_n[None,:],Kmmi) - _dC_dpsi1 = - alpha_n * np.dot(psi1_n[None,:],Kmmi) - _dD_dpsi1_1 = - gamma_n**2 * np.dot(psi1_n[None,:],Kmmi) - _dD_dpsi1_2 = 2. * gamma_k * np.dot(psi1_n[None,:],Kmmi) - - _dA_dKmm = .5*V_n**2 * np.dot(psin_K.T,psin_K) - _dC_dKmm = .5 * alpha_n * np.dot(psin_K.T,psin_K) - _dD_dKmm_1 = .5*gamma_n**2 * np.dot(psin_K.T,psin_K) - _dD_dKmm_2 = - gamma_n * np.dot(psin_K.T,psin_K) + _dpsi1 = -V_n**2 * psin_K #Diag_dA_dpsi1 + _dpsi1 += - alpha_n * psin_K #Diag_dC_dpsi1 + _dpsi1 += - gamma_n**2 * psin_K + 2. * gamma_k * psin_K #Diag_dD_dpsi1 _dKmm = .5*V_n**2 * np.dot(psin_K.T,psin_K) #Diag_dA_dKmm _dKmm += .5 * alpha_n * np.dot(psin_K.T,psin_K) #Diag_dC_dKmm _dKmm += .5*gamma_n**2 * np.dot(psin_K.T,psin_K) - gamma_n * np.dot(psin_K.T,psin_K) #Diag_dD_dKmm - _dKmm_dtheta = self.kern.dK_dtheta(_dKmm,self.Z) + + _dpsi1_dtheta += self.kern.dK_dtheta(_dpsi1,X_n[None,:],self.Z) + _dKmm_dtheta += self.kern.dK_dtheta(_dKmm,self.Z) + + _dKmm_dX += 2.*self.kern.dK_dX(_dKmm ,self.Z) + _dpsi1_dX += self.kern.dK_dX(_dpsi1.T,self.Z,X_n[None,:]) + + + #_dA_dpsi1 = -V_n**2 * np.dot(psi1_n[None,:],Kmmi) + #_dC_dpsi1 = - alpha_n * np.dot(psi1_n[None,:],Kmmi) + #_dD_dpsi1_1 = - gamma_n**2 * np.dot(psi1_n[None,:],Kmmi) + #_dD_dpsi1_2 = 2. * gamma_k * np.dot(psi1_n[None,:],Kmmi) + + + #dA_dpsi1_theta += self.kern.dK_dtheta(_dA_dpsi1,X_n[None,:],self.Z) + #_dC_dpsi1_dtheta += self.kern.dK_dtheta(_dC_dpsi1,X_n[None,:],self.Z) + #_dD_dpsi1_dtheta_1 += self.kern.dK_dtheta(_dD_dpsi1_1,X_n[None,:],self.Z) + #_dD_dpsi1_dtheta_2 += self.kern.dK_dtheta(_dD_dpsi1_2,X_n[None,:],self.Z) + + + #dA_dpsi1_X += self.kern.dK_dX(_dA_dpsi1.T,self.Z,X_n[None,:]) + #_dC_dpsi1_dX += self.kern.dK_dX(_dC_dpsi1.T,self.Z,X_n[None,:]) + #_dD_dpsi1_dX_1 += self.kern.dK_dX(_dD_dpsi1_1.T,self.Z,X_n[None,:]) + #_dD_dpsi1_dX_2 += self.kern.dK_dX(_dD_dpsi1_2.T,self.Z,X_n[None,:]) - dA_dpsi1_theta += self.kern.dK_dtheta(_dA_dpsi1,X_n[None,:],self.Z) - _dC_dpsi1_dtheta += self.kern.dK_dtheta(_dC_dpsi1,X_n[None,:],self.Z) - _dD_dpsi1_dtheta_1 += self.kern.dK_dtheta(_dD_dpsi1_1,X_n[None,:],self.Z) - _dD_dpsi1_dtheta_2 += self.kern.dK_dtheta(_dD_dpsi1_2,X_n[None,:],self.Z) - - dA_dKmm_theta += self.kern.dK_dtheta(_dA_dKmm,self.Z) - _dC_dKmm_dtheta += self.kern.dK_dtheta(_dC_dKmm,self.Z) - _dD_dKmm_dtheta_1 += self.kern.dK_dtheta(_dD_dKmm_1,self.Z) - _dD_dKmm_dtheta_2 += self.kern.dK_dtheta(_dD_dKmm_2,self.Z) - - dA_dpsi1_X += self.kern.dK_dX(_dA_dpsi1.T,self.Z,X_n[None,:]) - _dC_dpsi1_dX += self.kern.dK_dX(_dC_dpsi1.T,self.Z,X_n[None,:]) - _dD_dpsi1_dX_1 += self.kern.dK_dX(_dD_dpsi1_1.T,self.Z,X_n[None,:]) - _dD_dpsi1_dX_2 += self.kern.dK_dX(_dD_dpsi1_2.T,self.Z,X_n[None,:]) - - dA_dKmm_X += 2.*self.kern.dK_dX(_dA_dKmm,self.Z) - _dC_dKmm_dX += 2.*self.kern.dK_dX(_dC_dKmm,self.Z) - _dD_dKmm_dX_1 += 2.*self.kern.dK_dX(_dD_dKmm_1,self.Z) - _dD_dKmm_dX_2 += 2.*self.kern.dK_dX(_dD_dKmm_2,self.Z) + #_dA_dKmm = .5*V_n**2 * np.dot(psin_K.T,psin_K) + #_dC_dKmm = .5 * alpha_n * np.dot(psin_K.T,psin_K) + #_dD_dKmm_1 = .5*gamma_n**2 * np.dot(psin_K.T,psin_K) + #_dD_dKmm_2 = - gamma_n * np.dot(psin_K.T,psin_K) + #dA_dKmm_theta += self.kern.dK_dtheta(_dA_dKmm,self.Z) + #_dC_dKmm_dtheta += self.kern.dK_dtheta(_dC_dKmm,self.Z) + #_dD_dKmm_dtheta_1 += self.kern.dK_dtheta(_dD_dKmm_1,self.Z) + #_dD_dKmm_dtheta_2 += self.kern.dK_dtheta(_dD_dKmm_2,self.Z) - - self._dL_dtheta = self.kern.dKdiag_dtheta(dL_dpsi0,self.X) - self._dL_dtheta += self.kern.dK_dtheta(dA_dpsi1 + dC_dpsi1 + dD_dpsi1,self.X,self.Z) - self._dL_dtheta += self.kern.dK_dtheta(dL_dKmm,X=self.Z) - self._dL_dtheta += dA_dpsi0_theta - self._dL_dtheta += dA_dKmm_theta + _dC_dKmm_dtheta + _dD_dKmm_dtheta_1 + _dD_dKmm_dtheta_2 - self._dL_dtheta += dA_dpsi1_theta + _dC_dpsi1_dtheta + _dD_dpsi1_dtheta_2 + _dD_dpsi1_dtheta_1 + #dA_dKmm_X += 2.*self.kern.dK_dX(_dA_dKmm,self.Z) + #_dC_dKmm_dX += 2.*self.kern.dK_dX(_dC_dKmm,self.Z) + #_dD_dKmm_dX_1 += 2.*self.kern.dK_dX(_dD_dKmm_1,self.Z) + #_dD_dKmm_dX_2 += 2.*self.kern.dK_dX(_dD_dKmm_2,self.Z) + self._dL_dtheta = self.kern.dKdiag_dtheta(self._dL_dpsi0,self.X) + self._dL_dtheta += self.kern.dK_dtheta(self._dL_dpsi1,self.X,self.Z) + self._dL_dtheta += self.kern.dK_dtheta(self._dL_dKmm,X=self.Z) + self._dL_dtheta += _dKmm_dtheta + self._dL_dtheta += _dpsi1_dtheta - self._dL_dX = self.kern.dK_dX(dA_dpsi1.T,self.Z,self.X) + self.kern.dK_dX(dC_dpsi1.T,self.Z,self.X) + self.kern.dK_dX(dD_dpsi1.T,self.Z,self.X) - self._dL_dX += 2. * self.kern.dK_dX(dL_dKmm,X=self.Z) - self._dL_dX += dA_dpsi1_X + dA_dKmm_X + _dC_dpsi1_dX + _dC_dKmm_dX + _dD_dpsi1_dX_2 + _dD_dKmm_dX_2 + _dD_dpsi1_dX_1 + _dD_dKmm_dX_1 - + self._dL_dX = self.kern.dK_dX(self._dL_dpsi1.T,self.Z,self.X) + self._dL_dX += 2. * self.kern.dK_dX(self._dL_dKmm,X=self.Z) + self._dL_dX += _dpsi1_dX + self._dL_dX += _dKmm_dX From 98a2adc7d97ed15e98de98aabf3a1f2f2b1d91e2 Mon Sep 17 00:00:00 2001 From: Teo de Campos Date: Tue, 14 May 2013 17:52:23 +0100 Subject: [PATCH 4/5] GPy/util/visualize.py: fixed conflict. --- GPy/util/visualize.py | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/GPy/util/visualize.py b/GPy/util/visualize.py index 3bcfff38..64bf9a70 100644 --- a/GPy/util/visualize.py +++ b/GPy/util/visualize.py @@ -217,16 +217,11 @@ class image_show(data_show): self.axes.figure.canvas.draw() # Teo - original line: plt.show() def set_image(self, vals): -<<<<<<< HEAD dim = self.dimensions[0] * self.dimensions[1] self.vals = np.reshape(vals[0,dim*self.selectImage+np.array(range(dim))], self.dimensions, order='F') -======= - self.vals = np.reshape(vals, self.dimensions, order='F').copy() ->>>>>>> 47a7df9756e47ba775eb04c72e41a31933013ea4 if self.transpose: self.vals = self.vals.T.copy() if not self.scale: -<<<<<<< HEAD self.vals = self.vals if self.invert: self.vals = -self.vals @@ -242,12 +237,6 @@ class image_show(data_show): if not self.palette == []: # applying using an image palette (e.g. if the image has been quantized) self.vals = Image.fromarray(self.vals.astype('uint8')) self.vals.putpalette(self.palette) # palette is a list, must be loaded before calling this function -======= - self.vals = self.vals.copy() - #if self.invert: - # self.vals = -self.vals ->>>>>>> 47a7df9756e47ba775eb04c72e41a31933013ea4 - class mocap_data_show(data_show): """Base class for visualizing motion capture data.""" From 4e827e913d2dc7e7187ce7b5be435f3c6b959cba Mon Sep 17 00:00:00 2001 From: Ricardo Date: Wed, 15 May 2013 02:01:08 +0100 Subject: [PATCH 5/5] Some changes --- GPy/models/FITC.py | 104 +++++++++++++-------------------------------- 1 file changed, 30 insertions(+), 74 deletions(-) diff --git a/GPy/models/FITC.py b/GPy/models/FITC.py index 95cf1352..c02f470e 100644 --- a/GPy/models/FITC.py +++ b/GPy/models/FITC.py @@ -62,8 +62,9 @@ class FITC(sparse_GP): self.psi1V = np.dot(self.psi1, self.V_star) # back substutue C into psi1V - tmp, info1 = linalg.lapack.flapack.dtrtrs(self.Lm, np.asfortranarray(self.psi1V), lower=1, trans=0) - self._LBi_Lmi_psi1V, _ = linalg.lapack.flapack.dtrtrs(self.LB, np.asfortranarray(tmp), lower=1, trans=0) + Lmi_psi1V, info1 = linalg.lapack.flapack.dtrtrs(self.Lm, np.asfortranarray(self.psi1V), lower=1, trans=0) + self._LBi_Lmi_psi1V, _ = linalg.lapack.flapack.dtrtrs(self.LB, np.asfortranarray(Lmi_psi1V), lower=1, trans=0) + Kmmipsi1 = np.dot(self.Lmi.T,Lmipsi1) b_psi1_Ki = self.beta_star * Kmmipsi1.T @@ -76,100 +77,50 @@ class FITC(sparse_GP): VV_p_Ki = np.dot(VVT,Kmmipsi1.T) Ki_pVVp_Ki = np.dot(Kmmipsi1,VV_p_Ki) psi1beta = self.psi1*self.beta_star.T - H = self.Kmm + mdot(self.psi1,self.beta_star*self.psi1.T) + H = self.Kmm + mdot(self.psi1,psi1beta.T) Hi, LH, LHi, logdetH = pdinv(H) betapsi1TLmiLBi = np.dot(psi1beta.T,LBiLmi.T) alpha = np.array([np.dot(a.T,a) for a in betapsi1TLmiLBi])[:,None] gamma_1 = mdot(VVT,self.psi1.T,Hi) pHip = mdot(self.psi1.T,Hi,self.psi1) gamma_2 = mdot(self.beta_star*pHip,self.V_star) - gamma_3 = self.V_star * mdot(self.V_star.T,pHip*self.beta_star).T + #gamma_3 = self.V_star * mdot(self.V_star.T,pHip*self.beta_star).T + gamma_3 = self.V_star * gamma_2 - - self._dL_dpsi0 = .5 * self.V_star**2 #dA_psi0???? - self._dL_dpsi0 += -0.5 * self.beta_star#dA_dpsi0 + self._dL_dpsi0 = -0.5 * self.beta_star#dA_dpsi0: logdet(self.beta_star) + self._dL_dpsi0 += .5 * self.V_star**2 #dA_psi0: yT*beta_star*y self._dL_dpsi0 += .5 *alpha #dC_dpsi0 self._dL_dpsi0 += 0.5*mdot(self.beta_star*pHip,self.V_star)**2 - self.V_star * mdot(self.V_star.T,pHip*self.beta_star).T #dD_dpsi0 - self._dL_dpsi1 = b_psi1_Ki.copy() #dA_dpsi1 + self._dL_dpsi1 = b_psi1_Ki.copy() #dA_dpsi1: logdet(self.beta_star) self._dL_dpsi1 += -np.dot(psi1beta.T,LBL_inv) #dC_dpsi1 self._dL_dpsi1 += gamma_1 - mdot(psi1beta.T,Hi,self.psi1,gamma_1) #dD_dpsi1 - self._dL_dKmm = -0.5 * np.dot(Kmmipsi1,b_psi1_Ki) #dA_dKmm + self._dL_dKmm = -0.5 * np.dot(Kmmipsi1,b_psi1_Ki) #dA_dKmm: logdet(self.beta_star) self._dL_dKmm += -.5*Kmmi + .5*LBL_inv + mdot(LBL_inv,psi1beta,Kmmipsi1.T) #dC_dKmm self._dL_dKmm += -.5 * mdot(Hi,self.psi1,gamma_1) #dD_dKmm - _dpsi1_dtheta = 0 - _dpsi1_dX = 0 - _dKmm_dtheta = 0 - _dKmm_dX = 0 + self._dpsi1_dtheta = 0 + self._dpsi1_dX = 0 + self._dKmm_dtheta = 0 + self._dKmm_dX = 0 for psi1_n,V_n,X_n,alpha_n,gamma_n,gamma_k in zip(self.psi1.T,self.V_star,self.X,alpha,gamma_2,gamma_3): psin_K = np.dot(psi1_n[None,:],Kmmi) - _dpsi1 = -V_n**2 * psin_K #Diag_dA_dpsi1 + _dpsi1 = -V_n**2 * psin_K #dA_dpsi1: yT*beta_star*y _dpsi1 += - alpha_n * psin_K #Diag_dC_dpsi1 _dpsi1 += - gamma_n**2 * psin_K + 2. * gamma_k * psin_K #Diag_dD_dpsi1 - _dKmm = .5*V_n**2 * np.dot(psin_K.T,psin_K) #Diag_dA_dKmm + _dKmm = .5*V_n**2 * np.dot(psin_K.T,psin_K) #dA_dKmm: yT*beta_star*y _dKmm += .5 * alpha_n * np.dot(psin_K.T,psin_K) #Diag_dC_dKmm - _dKmm += .5*gamma_n**2 * np.dot(psin_K.T,psin_K) - gamma_n * np.dot(psin_K.T,psin_K) #Diag_dD_dKmm + _dKmm += .5*gamma_n**2 * np.dot(psin_K.T,psin_K) - gamma_k * np.dot(psin_K.T,psin_K) #Diag_dD_dKmm - _dpsi1_dtheta += self.kern.dK_dtheta(_dpsi1,X_n[None,:],self.Z) - _dKmm_dtheta += self.kern.dK_dtheta(_dKmm,self.Z) - - _dKmm_dX += 2.*self.kern.dK_dX(_dKmm ,self.Z) - _dpsi1_dX += self.kern.dK_dX(_dpsi1.T,self.Z,X_n[None,:]) - - - #_dA_dpsi1 = -V_n**2 * np.dot(psi1_n[None,:],Kmmi) - #_dC_dpsi1 = - alpha_n * np.dot(psi1_n[None,:],Kmmi) - #_dD_dpsi1_1 = - gamma_n**2 * np.dot(psi1_n[None,:],Kmmi) - #_dD_dpsi1_2 = 2. * gamma_k * np.dot(psi1_n[None,:],Kmmi) - - - #dA_dpsi1_theta += self.kern.dK_dtheta(_dA_dpsi1,X_n[None,:],self.Z) - #_dC_dpsi1_dtheta += self.kern.dK_dtheta(_dC_dpsi1,X_n[None,:],self.Z) - #_dD_dpsi1_dtheta_1 += self.kern.dK_dtheta(_dD_dpsi1_1,X_n[None,:],self.Z) - #_dD_dpsi1_dtheta_2 += self.kern.dK_dtheta(_dD_dpsi1_2,X_n[None,:],self.Z) - - - #dA_dpsi1_X += self.kern.dK_dX(_dA_dpsi1.T,self.Z,X_n[None,:]) - #_dC_dpsi1_dX += self.kern.dK_dX(_dC_dpsi1.T,self.Z,X_n[None,:]) - #_dD_dpsi1_dX_1 += self.kern.dK_dX(_dD_dpsi1_1.T,self.Z,X_n[None,:]) - #_dD_dpsi1_dX_2 += self.kern.dK_dX(_dD_dpsi1_2.T,self.Z,X_n[None,:]) - - - - #_dA_dKmm = .5*V_n**2 * np.dot(psin_K.T,psin_K) - #_dC_dKmm = .5 * alpha_n * np.dot(psin_K.T,psin_K) - #_dD_dKmm_1 = .5*gamma_n**2 * np.dot(psin_K.T,psin_K) - #_dD_dKmm_2 = - gamma_n * np.dot(psin_K.T,psin_K) - - - #dA_dKmm_theta += self.kern.dK_dtheta(_dA_dKmm,self.Z) - #_dC_dKmm_dtheta += self.kern.dK_dtheta(_dC_dKmm,self.Z) - #_dD_dKmm_dtheta_1 += self.kern.dK_dtheta(_dD_dKmm_1,self.Z) - #_dD_dKmm_dtheta_2 += self.kern.dK_dtheta(_dD_dKmm_2,self.Z) - - - #dA_dKmm_X += 2.*self.kern.dK_dX(_dA_dKmm,self.Z) - #_dC_dKmm_dX += 2.*self.kern.dK_dX(_dC_dKmm,self.Z) - #_dD_dKmm_dX_1 += 2.*self.kern.dK_dX(_dD_dKmm_1,self.Z) - #_dD_dKmm_dX_2 += 2.*self.kern.dK_dX(_dD_dKmm_2,self.Z) - - - self._dL_dtheta = self.kern.dKdiag_dtheta(self._dL_dpsi0,self.X) - self._dL_dtheta += self.kern.dK_dtheta(self._dL_dpsi1,self.X,self.Z) - self._dL_dtheta += self.kern.dK_dtheta(self._dL_dKmm,X=self.Z) - self._dL_dtheta += _dKmm_dtheta - self._dL_dtheta += _dpsi1_dtheta - - self._dL_dX = self.kern.dK_dX(self._dL_dpsi1.T,self.Z,self.X) - self._dL_dX += 2. * self.kern.dK_dX(self._dL_dKmm,X=self.Z) - self._dL_dX += _dpsi1_dX - self._dL_dX += _dKmm_dX + self._dpsi1_dtheta += self.kern.dK_dtheta(_dpsi1,X_n[None,:],self.Z) + self._dKmm_dtheta += self.kern.dK_dtheta(_dKmm,self.Z) + self._dKmm_dX += 2.*self.kern.dK_dX(_dKmm ,self.Z) + self._dpsi1_dX += self.kern.dK_dX(_dpsi1.T,self.Z,X_n[None,:]) # the partial derivative vector for the likelihood @@ -217,16 +168,21 @@ class FITC(sparse_GP): if self.has_uncertain_inputs: raise NotImplementedError, "FITC approximation not implemented for uncertain inputs" else: - #dL_dtheta = self.dA_dtheta + self.dlogB_dtheta + self.dD_dtheta - dL_dtheta = self._dL_dtheta #FIXME + dL_dtheta = self.kern.dKdiag_dtheta(self._dL_dpsi0,self.X) + dL_dtheta += self.kern.dK_dtheta(self._dL_dpsi1,self.X,self.Z) + dL_dtheta += self.kern.dK_dtheta(self._dL_dKmm,X=self.Z) + dL_dtheta += self._dKmm_dtheta + dL_dtheta += self._dpsi1_dtheta return dL_dtheta def dL_dZ(self): if self.has_uncertain_inputs: raise NotImplementedError, "FITC approximation not implemented for uncertain inputs" else: - #dL_dZ = self.dA_dX + self.dlogB_dX + self.dD_dX - dL_dZ = self._dL_dX #FIXME + dL_dZ = self.kern.dK_dX(self._dL_dpsi1.T,self.Z,self.X) + dL_dZ += 2. * self.kern.dK_dX(self._dL_dKmm,X=self.Z) + dL_dZ += self._dpsi1_dX + dL_dZ += self._dKmm_dX return dL_dZ def _raw_predict(self, Xnew, which_parts, full_cov=False):