mirror of
https://github.com/SheffieldML/GPy.git
synced 2026-05-13 22:12:38 +02:00
some minor example modifications and cgd adjustments
This commit is contained in:
parent
9229100af7
commit
5321bfc8c9
4 changed files with 33 additions and 31 deletions
|
|
@ -176,13 +176,12 @@ def bgplvm_simulation_matlab_compare():
|
||||||
Y = sim_data['Y']
|
Y = sim_data['Y']
|
||||||
S = sim_data['S']
|
S = sim_data['S']
|
||||||
mu = sim_data['mu']
|
mu = sim_data['mu']
|
||||||
M, [_, Q] = 30, mu.shape
|
M, [_, Q] = 20, mu.shape
|
||||||
Q = 2
|
|
||||||
|
|
||||||
from GPy.models import mrd
|
from GPy.models import mrd
|
||||||
from GPy import kern
|
from GPy import kern
|
||||||
reload(mrd); reload(kern)
|
reload(mrd); reload(kern)
|
||||||
#k = kern.rbf(Q, ARD=True) + kern.bias(Q, np.exp(-2)) + kern.white(Q, np.exp(-2))
|
# k = kern.rbf(Q, ARD=True) + kern.bias(Q, np.exp(-2)) + kern.white(Q, np.exp(-2))
|
||||||
k = kern.linear(Q, ARD=True) + kern.bias(Q, np.exp(-2)) + kern.white(Q, np.exp(-2))
|
k = kern.linear(Q, ARD=True) + kern.bias(Q, np.exp(-2)) + kern.white(Q, np.exp(-2))
|
||||||
m = Bayesian_GPLVM(Y, Q, init="PCA", M=M, kernel=k,
|
m = Bayesian_GPLVM(Y, Q, init="PCA", M=M, kernel=k,
|
||||||
# X=mu,
|
# X=mu,
|
||||||
|
|
@ -191,14 +190,15 @@ def bgplvm_simulation_matlab_compare():
|
||||||
m.ensure_default_constraints()
|
m.ensure_default_constraints()
|
||||||
m.auto_scale_factor = True
|
m.auto_scale_factor = True
|
||||||
m['noise'] = Y.var() / 100.
|
m['noise'] = Y.var() / 100.
|
||||||
|
m['linear_variance'] = .01
|
||||||
|
|
||||||
lscstr = '{}'.format(k.parts[0].name)
|
# lscstr = '{}'.format(k.parts[0].name)
|
||||||
# m[lscstr] = .01
|
# m[lscstr] = .01
|
||||||
m.unconstrain(lscstr); m.constrain_fixed(lscstr, 10)
|
# m.unconstrain(lscstr); m.constrain_fixed(lscstr, 10)
|
||||||
|
|
||||||
lscstr = 'X_variance'
|
# lscstr = 'X_variance'
|
||||||
# m[lscstr] = .01
|
# m[lscstr] = .01
|
||||||
m.unconstrain(lscstr); m.constrain_fixed(lscstr, .1)
|
# m.unconstrain(lscstr); m.constrain_fixed(lscstr, .1)
|
||||||
|
|
||||||
# cstr = 'white'
|
# cstr = 'white'
|
||||||
# m.unconstrain(cstr); m.constrain_bounded(cstr, .01, 1.)
|
# m.unconstrain(cstr); m.constrain_bounded(cstr, .01, 1.)
|
||||||
|
|
|
||||||
|
|
@ -166,25 +166,26 @@ class Async_Optimize(object):
|
||||||
except Empty:
|
except Empty:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def fmin_async(self, f, df, x0, callback, update_rule=FletcherReeves,
|
def opt_async(self, f, df, x0, callback, update_rule=FletcherReeves,
|
||||||
messages=0, maxiter=5e3, max_f_eval=15e3, gtol=1e-6,
|
messages=0, maxiter=5e3, max_f_eval=15e3, gtol=1e-6,
|
||||||
report_every=10, *args, **kwargs):
|
report_every=10, *args, **kwargs):
|
||||||
self.runsignal.set()
|
self.runsignal.set()
|
||||||
outqueue = Queue()
|
outqueue = Queue()
|
||||||
|
c = None
|
||||||
if callback:
|
if callback:
|
||||||
self.callback = callback
|
self.callback = callback
|
||||||
c = Thread(target=self.async_callback_collect, args=(outqueue,))
|
c = Thread(target=self.async_callback_collect, args=(outqueue,))
|
||||||
c.start()
|
c.start()
|
||||||
p = _CGDAsync(f, df, x0, update_rule, self.runsignal, self.SENTINEL,
|
p = _CGDAsync(f, df, x0, update_rule, self.runsignal, self.SENTINEL,
|
||||||
report_every=report_every, messages=messages, maxiter=maxiter,
|
report_every=report_every, messages=messages, maxiter=maxiter,
|
||||||
max_f_eval=max_f_eval, gtol=gtol, outqueue=outqueue, *args, **kwargs)
|
max_f_eval=max_f_eval, gtol=gtol, outqueue=outqueue, *args, **kwargs)
|
||||||
p.run()
|
p.run()
|
||||||
return p, c
|
return p, c
|
||||||
|
|
||||||
def fmin(self, f, df, x0, callback=None, update_rule=FletcherReeves,
|
def opt(self, f, df, x0, callback=None, update_rule=FletcherReeves,
|
||||||
messages=0, maxiter=5e3, max_f_eval=15e3, gtol=1e-6,
|
messages=0, maxiter=5e3, max_f_eval=15e3, gtol=1e-6,
|
||||||
report_every=10, *args, **kwargs):
|
report_every=10, *args, **kwargs):
|
||||||
p, c = self.fmin_async(f, df, x0, callback, update_rule, messages,
|
p, c = self.opt_async(f, df, x0, callback, update_rule, messages,
|
||||||
maxiter, max_f_eval, gtol,
|
maxiter, max_f_eval, gtol,
|
||||||
report_every, *args, **kwargs)
|
report_every, *args, **kwargs)
|
||||||
while self.runsignal.is_set():
|
while self.runsignal.is_set():
|
||||||
|
|
@ -195,7 +196,8 @@ class Async_Optimize(object):
|
||||||
# print "^C"
|
# print "^C"
|
||||||
self.runsignal.clear()
|
self.runsignal.clear()
|
||||||
p.join()
|
p.join()
|
||||||
if c.is_alive():
|
c.join()
|
||||||
|
if c and c.is_alive():
|
||||||
print "WARNING: callback still running, optimisation done!"
|
print "WARNING: callback still running, optimisation done!"
|
||||||
return p.result
|
return p.result
|
||||||
|
|
||||||
|
|
@ -208,11 +210,11 @@ class CGD(Async_Optimize):
|
||||||
if df returns tuple (grad, natgrad) it will optimize according
|
if df returns tuple (grad, natgrad) it will optimize according
|
||||||
to natural gradient rules
|
to natural gradient rules
|
||||||
'''
|
'''
|
||||||
name = "Conjugate Gradient Descent"
|
opt_name = "Conjugate Gradient Descent"
|
||||||
|
|
||||||
def fmin_async(self, *a, **kw):
|
def opt_async(self, *a, **kw):
|
||||||
"""
|
"""
|
||||||
fmin_async(self, f, df, x0, callback, update_rule=FletcherReeves,
|
opt_async(self, f, df, x0, callback, update_rule=FletcherReeves,
|
||||||
messages=0, maxiter=5e3, max_f_eval=15e3, gtol=1e-6,
|
messages=0, maxiter=5e3, max_f_eval=15e3, gtol=1e-6,
|
||||||
report_every=10, *args, **kwargs)
|
report_every=10, *args, **kwargs)
|
||||||
|
|
||||||
|
|
@ -240,11 +242,11 @@ class CGD(Async_Optimize):
|
||||||
|
|
||||||
at end of optimization!
|
at end of optimization!
|
||||||
"""
|
"""
|
||||||
return super(CGD, self).fmin_async(*a, **kw)
|
return super(CGD, self).opt_async(*a, **kw)
|
||||||
|
|
||||||
def fmin(self, *a, **kw):
|
def opt(self, *a, **kw):
|
||||||
"""
|
"""
|
||||||
fmin(self, f, df, x0, callback=None, update_rule=FletcherReeves,
|
opt(self, f, df, x0, callback=None, update_rule=FletcherReeves,
|
||||||
messages=0, maxiter=5e3, max_f_eval=15e3, gtol=1e-6,
|
messages=0, maxiter=5e3, max_f_eval=15e3, gtol=1e-6,
|
||||||
report_every=10, *args, **kwargs)
|
report_every=10, *args, **kwargs)
|
||||||
|
|
||||||
|
|
@ -267,5 +269,5 @@ class CGD(Async_Optimize):
|
||||||
|
|
||||||
at end of optimization
|
at end of optimization
|
||||||
"""
|
"""
|
||||||
return super(CGD, self).fmin(*a, **kw)
|
return super(CGD, self).opt(*a, **kw)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -259,28 +259,28 @@ class Bayesian_GPLVM(sparse_GP, GPLVM):
|
||||||
ax2.text(.5, .5, r"$\mathbf{X}$", alpha=.5, transform=ax2.transAxes,
|
ax2.text(.5, .5, r"$\mathbf{X}$", alpha=.5, transform=ax2.transAxes,
|
||||||
ha='center', va='center')
|
ha='center', va='center')
|
||||||
figs[-1].canvas.draw()
|
figs[-1].canvas.draw()
|
||||||
figs[-1].tight_layout(rect=(0, 0, 1, .9))
|
figs[-1].tight_layout(rect=(0, 0, 1, .86))
|
||||||
# ax3 = pylab.subplot2grid(splotshape, (3, 0), 2, 4, sharex=ax2)
|
# ax3 = pylab.subplot2grid(splotshape, (3, 0), 2, 4, sharex=ax2)
|
||||||
figs.append(pylab.figure("BGPLVM DEBUG S", figsize=(12, 4)))
|
figs.append(pylab.figure("BGPLVM DEBUG S", figsize=(12, 4)))
|
||||||
ax3 = self._debug_get_axis(figs)
|
ax3 = self._debug_get_axis(figs)
|
||||||
ax3.text(.5, .5, r"$\mathbf{S}$", alpha=.5, transform=ax3.transAxes,
|
ax3.text(.5, .5, r"$\mathbf{S}$", alpha=.5, transform=ax3.transAxes,
|
||||||
ha='center', va='center')
|
ha='center', va='center')
|
||||||
figs[-1].canvas.draw()
|
figs[-1].canvas.draw()
|
||||||
figs[-1].tight_layout(rect=(0, 0, 1, .9))
|
figs[-1].tight_layout(rect=(0, 0, 1, .86))
|
||||||
# ax4 = pylab.subplot2grid(splotshape, (5, 0), 2, 2)
|
# ax4 = pylab.subplot2grid(splotshape, (5, 0), 2, 2)
|
||||||
figs.append(pylab.figure("BGPLVM DEBUG Z", figsize=(6, 4)))
|
figs.append(pylab.figure("BGPLVM DEBUG Z", figsize=(6, 4)))
|
||||||
ax4 = self._debug_get_axis(figs)
|
ax4 = self._debug_get_axis(figs)
|
||||||
ax4.text(.5, .5, r"$\mathbf{Z}$", alpha=.5, transform=ax4.transAxes,
|
ax4.text(.5, .5, r"$\mathbf{Z}$", alpha=.5, transform=ax4.transAxes,
|
||||||
ha='center', va='center')
|
ha='center', va='center')
|
||||||
figs[-1].canvas.draw()
|
figs[-1].canvas.draw()
|
||||||
figs[-1].tight_layout(rect=(0, 0, 1, .9))
|
figs[-1].tight_layout(rect=(0, 0, 1, .86))
|
||||||
# ax5 = pylab.subplot2grid(splotshape, (5, 2), 2, 2)
|
# ax5 = pylab.subplot2grid(splotshape, (5, 2), 2, 2)
|
||||||
figs.append(pylab.figure("BGPLVM DEBUG theta", figsize=(6, 4)))
|
figs.append(pylab.figure("BGPLVM DEBUG theta", figsize=(6, 4)))
|
||||||
ax5 = self._debug_get_axis(figs)
|
ax5 = self._debug_get_axis(figs)
|
||||||
ax5.text(.5, .5, r"${\theta}$", alpha=.5, transform=ax5.transAxes,
|
ax5.text(.5, .5, r"${\theta}$", alpha=.5, transform=ax5.transAxes,
|
||||||
ha='center', va='center')
|
ha='center', va='center')
|
||||||
figs[-1].canvas.draw()
|
figs[-1].canvas.draw()
|
||||||
figs[-1].tight_layout(rect=(0, 0, 1, .9))
|
figs[-1].tight_layout(rect=(.15, 0, 1, .86))
|
||||||
figs.append(pylab.figure("BGPLVM DEBUG Kmm", figsize=(12, 6)))
|
figs.append(pylab.figure("BGPLVM DEBUG Kmm", figsize=(12, 6)))
|
||||||
fig = figs[-1]
|
fig = figs[-1]
|
||||||
ax6 = fig.add_subplot(121)
|
ax6 = fig.add_subplot(121)
|
||||||
|
|
@ -345,16 +345,16 @@ class Bayesian_GPLVM(sparse_GP, GPLVM):
|
||||||
# loc=3, ncol=self.Q, bbox_to_anchor=(0, 1.15, 1, 1.15),
|
# loc=3, ncol=self.Q, bbox_to_anchor=(0, 1.15, 1, 1.15),
|
||||||
# borderaxespad=0, mode="expand")
|
# borderaxespad=0, mode="expand")
|
||||||
ax2.legend(Xlatentplts, [r"$Q_{}$".format(i + 1) for i in range(self.Q)],
|
ax2.legend(Xlatentplts, [r"$Q_{}$".format(i + 1) for i in range(self.Q)],
|
||||||
loc=3, ncol=self.Q, bbox_to_anchor=(0, 1.01, 1, 1.01),
|
loc=3, ncol=self.Q, bbox_to_anchor=(0, 1.1, 1, 1.1),
|
||||||
borderaxespad=0, mode="expand")
|
borderaxespad=0, mode="expand")
|
||||||
ax3.legend(Xlatentplts, [r"$Q_{}$".format(i + 1) for i in range(self.Q)],
|
ax3.legend(Xlatentplts, [r"$Q_{}$".format(i + 1) for i in range(self.Q)],
|
||||||
loc=3, ncol=self.Q, bbox_to_anchor=(0, 1.01, 1, 1.01),
|
loc=3, ncol=self.Q, bbox_to_anchor=(0, 1.1, 1, 1.1),
|
||||||
borderaxespad=0, mode="expand")
|
borderaxespad=0, mode="expand")
|
||||||
ax4.legend(Xlatentplts, [r"$Q_{}$".format(i + 1) for i in range(self.Q)],
|
ax4.legend(Xlatentplts, [r"$Q_{}$".format(i + 1) for i in range(self.Q)],
|
||||||
loc=3, ncol=self.Q, bbox_to_anchor=(0, 1.01, 1, 1.01),
|
loc=3, ncol=self.Q, bbox_to_anchor=(0, 1.1, 1, 1.1),
|
||||||
borderaxespad=0, mode="expand")
|
borderaxespad=0, mode="expand")
|
||||||
ax5.legend(Xlatentplts, [r"$Q_{}$".format(i + 1) for i in range(self.Q)],
|
ax5.legend(Xlatentplts, [r"$Q_{}$".format(i + 1) for i in range(self.Q)],
|
||||||
loc=3, ncol=self.Q, bbox_to_anchor=(0, 1.01, 1, 1.01),
|
loc=3, ncol=self.Q, bbox_to_anchor=(0, 1.1, 1, 1.1),
|
||||||
borderaxespad=0, mode="expand")
|
borderaxespad=0, mode="expand")
|
||||||
Lleg = ax1.legend()
|
Lleg = ax1.legend()
|
||||||
Lleg.draggable()
|
Lleg.draggable()
|
||||||
|
|
|
||||||
|
|
@ -26,7 +26,7 @@ class Test(unittest.TestCase):
|
||||||
for _ in range(restarts):
|
for _ in range(restarts):
|
||||||
try:
|
try:
|
||||||
x0 = numpy.random.randn(N) * .5
|
x0 = numpy.random.randn(N) * .5
|
||||||
res = opt.fmin(f, df, x0, messages=0,
|
res = opt.opt(f, df, x0, messages=0,
|
||||||
maxiter=1000, gtol=1e-10)
|
maxiter=1000, gtol=1e-10)
|
||||||
assert numpy.allclose(res[0], 0, atol=1e-3)
|
assert numpy.allclose(res[0], 0, atol=1e-3)
|
||||||
break
|
break
|
||||||
|
|
@ -48,7 +48,7 @@ class Test(unittest.TestCase):
|
||||||
for _ in range(restarts):
|
for _ in range(restarts):
|
||||||
try:
|
try:
|
||||||
x0 = numpy.random.randn(N) * .5
|
x0 = numpy.random.randn(N) * .5
|
||||||
res = opt.fmin(f, df, x0, messages=0,
|
res = opt.opt(f, df, x0, messages=0,
|
||||||
maxiter=1000, gtol=1e-2)
|
maxiter=1000, gtol=1e-2)
|
||||||
assert numpy.allclose(res[0], 1, atol=.01)
|
assert numpy.allclose(res[0], 1, atol=.01)
|
||||||
break
|
break
|
||||||
|
|
@ -103,7 +103,7 @@ if __name__ == "__main__":
|
||||||
if r[-1] != RUNNING:
|
if r[-1] != RUNNING:
|
||||||
res[0] = r
|
res[0] = r
|
||||||
|
|
||||||
p, c = opt.fmin_async(f, df, x0.copy(), callback, messages=True, maxiter=1000,
|
p, c = opt.opt_async(f, df, x0.copy(), callback, messages=True, maxiter=1000,
|
||||||
report_every=20, gtol=1e-12)
|
report_every=20, gtol=1e-12)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue