mirror of
https://github.com/SheffieldML/GPy.git
synced 2026-05-18 13:55:14 +02:00
minor changes
This commit is contained in:
parent
c71ee37064
commit
e1edb062ed
3 changed files with 28 additions and 9 deletions
|
|
@ -58,7 +58,7 @@ class opt_SGD(Optimizer):
|
||||||
|
|
||||||
for s in param_shapes:
|
for s in param_shapes:
|
||||||
N, Q = s
|
N, Q = s
|
||||||
X = x[i:N*Q].reshape(N, Q)
|
X = x[i:i+N*Q].reshape(N, Q)
|
||||||
X = X[samples]
|
X = X[samples]
|
||||||
subset = np.append(subset, X.flatten())
|
subset = np.append(subset, X.flatten())
|
||||||
i += N*Q
|
i += N*Q
|
||||||
|
|
@ -92,10 +92,19 @@ class opt_SGD(Optimizer):
|
||||||
self.model.constrained_bounded_indices[b] = self.model.constrained_bounded_indices[b][mask]
|
self.model.constrained_bounded_indices[b] = self.model.constrained_bounded_indices[b][mask]
|
||||||
|
|
||||||
|
|
||||||
|
# here we shif the positive constraints. We cycle through each positive
|
||||||
|
# constraint
|
||||||
positive = self.model.constrained_positive_indices.copy()
|
positive = self.model.constrained_positive_indices.copy()
|
||||||
|
mask = (np.ones_like(positive) == 1)
|
||||||
for p in range(len(positive)):
|
for p in range(len(positive)):
|
||||||
pos = np.where(j == self.model.constrained_positive_indices[p])[0][0]
|
# we now check whether the constrained index appears in the j vector
|
||||||
self.model.constrained_positive_indices[p] = pos
|
# (the vector of the "active" indices)
|
||||||
|
pos = np.where(j == self.model.constrained_positive_indices[p])[0]
|
||||||
|
if len(pos) == 1:
|
||||||
|
self.model.constrained_positive_indices[p] = pos
|
||||||
|
else:
|
||||||
|
mask[p] = False
|
||||||
|
self.model.constrained_positive_indices = self.model.constrained_positive_indices[mask]
|
||||||
|
|
||||||
return (bounded_i, bounded_l, bounded_u), positive
|
return (bounded_i, bounded_l, bounded_u), positive
|
||||||
|
|
||||||
|
|
@ -109,6 +118,8 @@ class opt_SGD(Optimizer):
|
||||||
model_name = self.model.__class__.__name__
|
model_name = self.model.__class__.__name__
|
||||||
if model_name == 'GPLVM':
|
if model_name == 'GPLVM':
|
||||||
return [(N, Q)]
|
return [(N, Q)]
|
||||||
|
if model_name == 'Bayesian_GPLVM':
|
||||||
|
return [(N, Q), (N, Q)]
|
||||||
else:
|
else:
|
||||||
raise NotImplementedError
|
raise NotImplementedError
|
||||||
|
|
||||||
|
|
@ -119,14 +130,20 @@ class opt_SGD(Optimizer):
|
||||||
self.model.N = samples.sum()
|
self.model.N = samples.sum()
|
||||||
self.model.X = X[samples]
|
self.model.X = X[samples]
|
||||||
self.model.Y = self.model.Y[samples]
|
self.model.Y = self.model.Y[samples]
|
||||||
|
model_name = self.model.__class__.__name__
|
||||||
|
|
||||||
|
import pdb; pdb.set_trace()
|
||||||
|
if model_name == 'Bayesian_GPLVM':
|
||||||
|
self.model.trYYT = np.sum(np.square(self.model.Y))
|
||||||
|
|
||||||
if self.model.N == 0:
|
if self.model.N == 0:
|
||||||
return 0, step, self.model.N
|
return 0, step, self.model.N
|
||||||
|
|
||||||
b,p = self.shift_constraints(j)
|
b, p = self.shift_constraints(j)
|
||||||
|
|
||||||
momentum_term = self.momentum * step[j]
|
momentum_term = self.momentum * step[j]
|
||||||
f, fp = f_fp(self.x_opt[j])
|
f, fp = f_fp(self.x_opt[j])
|
||||||
|
|
||||||
step[j] = self.learning_rate[j] * fp
|
step[j] = self.learning_rate[j] * fp
|
||||||
self.x_opt[j] -= step[j] + momentum_term
|
self.x_opt[j] -= step[j] + momentum_term
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -20,9 +20,12 @@ class Bayesian_GPLVM(sparse_GP_regression, GPLVM):
|
||||||
:type init: 'PCA'|'random'
|
:type init: 'PCA'|'random'
|
||||||
|
|
||||||
"""
|
"""
|
||||||
def __init__(self, Y, Q, init='PCA', **kwargs):
|
def __init__(self, Y, Q, X = None, S = None, init='PCA', **kwargs):
|
||||||
X = self.initialise_latent(init, Q, Y)
|
if X == None:
|
||||||
S = np.ones_like(X) * 1e-2#
|
X = self.initialise_latent(init, Q, Y)
|
||||||
|
if S == None:
|
||||||
|
S = np.ones_like(X) * 1e-2
|
||||||
|
|
||||||
sparse_GP_regression.__init__(self, X, Y, X_uncertainty = S, **kwargs)
|
sparse_GP_regression.__init__(self, X, Y, X_uncertainty = S, **kwargs)
|
||||||
|
|
||||||
def get_param_names(self):
|
def get_param_names(self):
|
||||||
|
|
@ -59,4 +62,3 @@ class Bayesian_GPLVM(sparse_GP_regression, GPLVM):
|
||||||
|
|
||||||
def log_likelihood_gradients(self):
|
def log_likelihood_gradients(self):
|
||||||
return np.hstack((self.dL_dmuS().flatten(), sparse_GP_regression.log_likelihood_gradients(self)))
|
return np.hstack((self.dL_dmuS().flatten(), sparse_GP_regression.log_likelihood_gradients(self)))
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -37,7 +37,7 @@ class sparse_GP_regression(GP_regression):
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self,X,Y,kernel=None, X_uncertainty=None, beta=100., Z=None,Zslices=None,M=10,normalize_X=False,normalize_Y=False):
|
def __init__(self,X,Y,kernel=None, X_uncertainty=None, beta=100., Z=None,Zslices=None,M=10,normalize_X=False,normalize_Y=False):
|
||||||
self.scale_factor = 1000.0
|
self.scale_factor = 100.0
|
||||||
self.beta = beta
|
self.beta = beta
|
||||||
if Z is None:
|
if Z is None:
|
||||||
self.Z = np.random.permutation(X.copy())[:M]
|
self.Z = np.random.permutation(X.copy())[:M]
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue