From f4b997beb8e994a40d60ae0a3675801d845e8b00 Mon Sep 17 00:00:00 2001 From: Max Zwiessele Date: Fri, 3 May 2013 14:38:42 +0100 Subject: [PATCH] last opt updates and tests --- GPy/inference/conjugate_gradient_descent.py | 10 ++++++---- GPy/testing/cgd_tests.py | 11 +++++------ 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/GPy/inference/conjugate_gradient_descent.py b/GPy/inference/conjugate_gradient_descent.py index c88249c3..c9981fe8 100644 --- a/GPy/inference/conjugate_gradient_descent.py +++ b/GPy/inference/conjugate_gradient_descent.py @@ -63,14 +63,15 @@ class _Async_Optimization(Thread): return f_w def callback(self, *a): - self.outq.put(a) + if self.outq is not None: + self.outq.put(a) # self.parent and self.parent.callback(*a, **kw) pass # print "callback done" def callback_return(self, *a): self.callback(*a) - self.outq.put(self.SENTINEL) + self.callback(self.SENTINEL) self.runsignal.clear() def run(self, *args, **kwargs): @@ -170,16 +171,17 @@ class Async_Optimize(object): messages=0, maxiter=5e3, max_f_eval=15e3, gtol=1e-6, report_every=10, *args, **kwargs): self.runsignal.set() - outqueue = Queue() c = None + outqueue = None if callback: + outqueue = Queue() self.callback = callback c = Thread(target=self.async_callback_collect, args=(outqueue,)) c.start() p = _CGDAsync(f, df, x0, update_rule, self.runsignal, self.SENTINEL, report_every=report_every, messages=messages, maxiter=maxiter, max_f_eval=max_f_eval, gtol=gtol, outqueue=outqueue, *args, **kwargs) - p.run() + p.start() return p, c def opt(self, f, df, x0, callback=None, update_rule=FletcherReeves, diff --git a/GPy/testing/cgd_tests.py b/GPy/testing/cgd_tests.py index 57a08511..79e5e08b 100644 --- a/GPy/testing/cgd_tests.py +++ b/GPy/testing/cgd_tests.py @@ -14,7 +14,7 @@ from scipy.optimize.optimize import rosen, rosen_der class Test(unittest.TestCase): def testMinimizeSquare(self): - N = 2 + N = 100 A = numpy.random.rand(N) * numpy.eye(N) b = numpy.random.rand(N) * 0 f = lambda x: numpy.dot(x.T.dot(A), x) - numpy.dot(x.T, b) @@ -25,7 +25,7 @@ class Test(unittest.TestCase): restarts = 10 for _ in range(restarts): try: - x0 = numpy.random.randn(N) * .5 + x0 = numpy.random.randn(N) * 300 res = opt.opt(f, df, x0, messages=0, maxiter=1000, gtol=1e-10) assert numpy.allclose(res[0], 0, atol=1e-3) @@ -37,10 +37,9 @@ class Test(unittest.TestCase): raise AssertionError("Test failed for {} restarts".format(restarts)) def testRosen(self): - N = 2 + N = 20 f = rosen df = rosen_der - x0 = numpy.random.randn(N) * .5 opt = CGD() @@ -49,8 +48,8 @@ class Test(unittest.TestCase): try: x0 = numpy.random.randn(N) * .5 res = opt.opt(f, df, x0, messages=0, - maxiter=1000, gtol=1e-2) - assert numpy.allclose(res[0], 1, atol=.01) + maxiter=5e2, gtol=1e-2) + assert numpy.allclose(res[0], 1, atol=.1) break except: # RESTART