From 0acb196b2637b9b76600b9236eb96b74948812c6 Mon Sep 17 00:00:00 2001 From: mzwiessele Date: Tue, 13 May 2014 08:36:28 +0100 Subject: [PATCH 1/7] [examples] stick man example corrected --- GPy/examples/dimensionality_reduction.py | 27 +++++++++++++++--------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/GPy/examples/dimensionality_reduction.py b/GPy/examples/dimensionality_reduction.py index 43ba5937..71610702 100644 --- a/GPy/examples/dimensionality_reduction.py +++ b/GPy/examples/dimensionality_reduction.py @@ -408,13 +408,13 @@ def stick(kernel=None, optimize=True, verbose=True, plot=True): data = GPy.util.datasets.osu_run1() # optimize m = GPy.models.GPLVM(data['Y'], 2, kernel=kernel) - if optimize: m.optimize(messages=verbose, max_f_eval=10000) + if optimize: m.optimize('bfgs', messages=verbose, max_f_eval=10000) if plot: plt.clf ax = m.plot_latent() y = m.Y[0, :] data_show = GPy.plotting.matplot_dep.visualize.stick_show(y[None, :], connect=data['connect']) - vis = GPy.plotting.matplot_dep.visualize.lvm(m.X[0, :].copy(), m, data_show, latent_axes=ax) + vis = GPy.plotting.matplot_dep.visualize.lvm(m.X[:1, :].copy(), m, data_show, latent_axes=ax) raw_input('Press enter to finish') return m @@ -475,23 +475,30 @@ def robot_wireless(optimize=True, verbose=True, plot=True): def stick_bgplvm(model=None, optimize=True, verbose=True, plot=True): from GPy.models import BayesianGPLVM from matplotlib import pyplot as plt + import numpy as np import GPy data = GPy.util.datasets.osu_run1() Q = 6 - kernel = GPy.kern.RBF(Q, ARD=True) + GPy.kern.Bias(Q, _np.exp(-2)) + GPy.kern.White(Q, _np.exp(-2)) + kernel = GPy.kern.RBF(Q, lengthscale=np.repeat(.5, Q), ARD=True) + GPy.kern.Bias(Q, _np.exp(-2)) m = BayesianGPLVM(data['Y'], Q, init="PCA", num_inducing=20, kernel=kernel) + + m.data = data + + m.X.mean -= m.X.mean.mean(0); m.X.mean /= m.X.mean.var(0) + m.X.variance /= 100 + m.likelihood.variance = 0.001 + m.Z.randomize() + # optimize - m.ensure_default_constraints() - if optimize: m.optimize('scg', messages=verbose, max_iters=200, xtol=1e-300, ftol=1e-300) - m._set_params(m._get_params()) + if optimize: m.optimize('bfgs', messages=verbose, max_iters=1500, xtol=1e-300, ftol=1e-300) if plot: plt.clf, (latent_axes, sense_axes) = plt.subplots(1, 2) plt.sca(latent_axes) - m.plot_latent() - y = m.likelihood.Y[0, :].copy() - data_show = GPy.plotting.matplot_dep.visualize.stick_show(y[None, :], connect=data['connect']) - GPy.plotting.matplot_dep.visualize.lvm_dimselect(m.X[0, :].copy(), m, data_show, latent_axes=latent_axes, sense_axes=sense_axes) + m.plot_latent(ax=latent_axes) + y = m.Y[:1, :].copy() + data_show = GPy.plotting.matplot_dep.visualize.stick_show(y, connect=data['connect']) + GPy.plotting.matplot_dep.visualize.lvm_dimselect(m.X.mean[:1, :].copy(), m, data_show, latent_axes=latent_axes, sense_axes=sense_axes) raw_input('Press enter to finish') return m From 4590a05d0fc938d02ef99c3c32487f50d7455f45 Mon Sep 17 00:00:00 2001 From: mzwiessele Date: Tue, 13 May 2014 08:36:11 +0100 Subject: [PATCH 2/7] [visualize] minor --- GPy/plotting/matplot_dep/visualize.py | 1 - 1 file changed, 1 deletion(-) diff --git a/GPy/plotting/matplot_dep/visualize.py b/GPy/plotting/matplot_dep/visualize.py index fb443de1..6abd3872 100644 --- a/GPy/plotting/matplot_dep/visualize.py +++ b/GPy/plotting/matplot_dep/visualize.py @@ -103,7 +103,6 @@ class lvm(matplotlib_show): else: vals = param_to_array(model.X) - vals = param_to_array(vals) matplotlib_show.__init__(self, vals, axes=latent_axes) if isinstance(latent_axes,mpl.axes.Axes): From 4f627c904fa5d008f308421ae5636336d0042d5f Mon Sep 17 00:00:00 2001 From: mzwiessele Date: Tue, 13 May 2014 08:35:25 +0100 Subject: [PATCH 3/7] [variational] posterior object copies adjusted --- GPy/core/parameterization/param.py | 16 +++++++++++++--- GPy/core/parameterization/variational.py | 3 +++ 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/GPy/core/parameterization/param.py b/GPy/core/parameterization/param.py index 3ccbd169..19e48d84 100644 --- a/GPy/core/parameterization/param.py +++ b/GPy/core/parameterization/param.py @@ -89,6 +89,13 @@ class Param(OptimizationHandlable, ObsAr): def param_array(self): return self + @property + def values(self): + """ + Return self as numpy array view + """ + return self.view(np.ndarray) + @property def gradient(self): """ @@ -99,11 +106,11 @@ class Param(OptimizationHandlable, ObsAr): """ if getattr(self, '_gradient_array_', None) is None: self._gradient_array_ = numpy.empty(self._realshape_, dtype=numpy.float64) - return self._gradient_array_[self._current_slice_] + return self._gradient_array_#[self._current_slice_] @gradient.setter def gradient(self, val): - self._gradient_array_[self._current_slice_] = val + self._gradient_array_[:] = val #=========================================================================== # Array operations -> done @@ -114,7 +121,10 @@ class Param(OptimizationHandlable, ObsAr): #if not reduce(lambda a, b: a or numpy.any(b is Ellipsis), s, False) and len(s) <= self.ndim: # s += (Ellipsis,) new_arr = super(Param, self).__getitem__(s, *args, **kwargs) - try: new_arr._current_slice_ = s; new_arr._original_ = self.base is new_arr.base + try: + new_arr._current_slice_ = s + new_arr._gradient_array_ = self.gradient[s] + new_arr._original_ = self.base is new_arr.base except AttributeError: pass # returning 0d array or float, double etc return new_arr diff --git a/GPy/core/parameterization/variational.py b/GPy/core/parameterization/variational.py index 3730baed..044d1592 100644 --- a/GPy/core/parameterization/variational.py +++ b/GPy/core/parameterization/variational.py @@ -100,6 +100,9 @@ class VariationalPosterior(Parameterized): n.__dict__.update(dc) n._parameters_[dc['mean']._parent_index_] = dc['mean'] n._parameters_[dc['variance']._parent_index_] = dc['variance'] + n._gradient_array_ = None + oversize = self.size - self.mean.size - self.variance.size + n.size = n.mean.size + n.variance.size + oversize n.ndim = n.mean.ndim n.shape = n.mean.shape n.num_data = n.mean.shape[0] From 4b1577178c3fe23dfe2a31c2a30223b39fb87921 Mon Sep 17 00:00:00 2001 From: mzwiessele Date: Tue, 13 May 2014 08:33:26 +0100 Subject: [PATCH 4/7] [init] now returns normalized values --- GPy/util/initialization.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/GPy/util/initialization.py b/GPy/util/initialization.py index 22e63b6b..8d23b541 100644 --- a/GPy/util/initialization.py +++ b/GPy/util/initialization.py @@ -13,7 +13,11 @@ def initialize_latent(init, input_dim, Y): p = pca(Y) PC = p.project(Y, min(input_dim, Y.shape[1])) Xr[:PC.shape[0], :PC.shape[1]] = PC + vars = p.fracs[:input_dim] else: - var = Xr.var(0) - return Xr, var/var.max() - return Xr, p.fracs[:input_dim] \ No newline at end of file + vars = Xr.var(0) + + Xr -= Xr.mean(0) + Xr /= Xr.var(0) + + return Xr, vars/vars.max() \ No newline at end of file From 53ff580a6ecf19437585ec86ab9b18e95ffb3663 Mon Sep 17 00:00:00 2001 From: mzwiessele Date: Tue, 13 May 2014 09:03:57 +0100 Subject: [PATCH 5/7] [stick] bgplvm example now working --- GPy/examples/dimensionality_reduction.py | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/GPy/examples/dimensionality_reduction.py b/GPy/examples/dimensionality_reduction.py index 71610702..a15c2a93 100644 --- a/GPy/examples/dimensionality_reduction.py +++ b/GPy/examples/dimensionality_reduction.py @@ -480,18 +480,14 @@ def stick_bgplvm(model=None, optimize=True, verbose=True, plot=True): data = GPy.util.datasets.osu_run1() Q = 6 - kernel = GPy.kern.RBF(Q, lengthscale=np.repeat(.5, Q), ARD=True) + GPy.kern.Bias(Q, _np.exp(-2)) + kernel = GPy.kern.RBF(Q, lengthscale=np.repeat(.5, Q), ARD=True) m = BayesianGPLVM(data['Y'], Q, init="PCA", num_inducing=20, kernel=kernel) m.data = data - - m.X.mean -= m.X.mean.mean(0); m.X.mean /= m.X.mean.var(0) - m.X.variance /= 100 m.likelihood.variance = 0.001 - m.Z.randomize() # optimize - if optimize: m.optimize('bfgs', messages=verbose, max_iters=1500, xtol=1e-300, ftol=1e-300) + if optimize: m.optimize('bfgs', messages=verbose, max_iters=800, xtol=1e-300, ftol=1e-300) if plot: plt.clf, (latent_axes, sense_axes) = plt.subplots(1, 2) plt.sca(latent_axes) @@ -499,7 +495,8 @@ def stick_bgplvm(model=None, optimize=True, verbose=True, plot=True): y = m.Y[:1, :].copy() data_show = GPy.plotting.matplot_dep.visualize.stick_show(y, connect=data['connect']) GPy.plotting.matplot_dep.visualize.lvm_dimselect(m.X.mean[:1, :].copy(), m, data_show, latent_axes=latent_axes, sense_axes=sense_axes) - raw_input('Press enter to finish') + plt.draw() + #raw_input('Press enter to finish') return m @@ -516,7 +513,7 @@ def cmu_mocap(subject='35', motion=['01'], in_place=True, optimize=True, verbose if optimize: m.optimize(messages=verbose, max_f_eval=10000) if plot: ax = m.plot_latent() - y = m.likelihood.Y[0, :] + y = m.Y[0, :] data_show = GPy.plotting.matplot_dep.visualize.skeleton_show(y[None, :], data['skel']) lvm_visualizer = GPy.plotting.matplot_dep.visualize.lvm(m.X[0, :].copy(), m, data_show, ax) raw_input('Press enter to finish') From 8ff4a42d1a392906390edde8a6f7169a595cb7d1 Mon Sep 17 00:00:00 2001 From: mzwiessele Date: Tue, 13 May 2014 09:32:58 +0100 Subject: [PATCH 6/7] [param_array] doc --- GPy/core/parameterization/parameter_core.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/GPy/core/parameterization/parameter_core.py b/GPy/core/parameterization/parameter_core.py index 93924678..5113b8d9 100644 --- a/GPy/core/parameterization/parameter_core.py +++ b/GPy/core/parameterization/parameter_core.py @@ -713,6 +713,10 @@ class Parameterizable(OptimizationHandlable): @property def param_array(self): + """ + Array representing the parameters of this class. + There is only one copy of all parameters in memory, two during optimization. + """ if self._param_array_ is None: self._param_array_ = np.empty(self.size, dtype=np.float64) return self._param_array_ From f110bbd4c8e96908a77b5d3c93635051a83373dd Mon Sep 17 00:00:00 2001 From: mzwiessele Date: Tue, 13 May 2014 09:33:35 +0100 Subject: [PATCH 7/7] [bgplvm] init lengthscale as 0./var --- GPy/models/bayesian_gplvm.py | 2 +- GPy/util/initialization.py | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/GPy/models/bayesian_gplvm.py b/GPy/models/bayesian_gplvm.py index 03cd361c..2bcbe0b2 100644 --- a/GPy/models/bayesian_gplvm.py +++ b/GPy/models/bayesian_gplvm.py @@ -42,7 +42,7 @@ class BayesianGPLVM(SparseGP): assert Z.shape[1] == X.shape[1] if kernel is None: - kernel = kern.RBF(input_dim, lengthscale=fracs, ARD=True) # + kern.white(input_dim) + kernel = kern.RBF(input_dim, lengthscale=1./fracs, ARD=True) # + kern.white(input_dim) if likelihood is None: likelihood = Gaussian() diff --git a/GPy/util/initialization.py b/GPy/util/initialization.py index 8d23b541..dd3b6ec7 100644 --- a/GPy/util/initialization.py +++ b/GPy/util/initialization.py @@ -13,11 +13,11 @@ def initialize_latent(init, input_dim, Y): p = pca(Y) PC = p.project(Y, min(input_dim, Y.shape[1])) Xr[:PC.shape[0], :PC.shape[1]] = PC - vars = p.fracs[:input_dim] + var = p.fracs[:input_dim] else: - vars = Xr.var(0) + var = Xr.var(0) Xr -= Xr.mean(0) Xr /= Xr.var(0) - return Xr, vars/vars.max() \ No newline at end of file + return Xr, var/var.max() \ No newline at end of file