mirror of
https://github.com/SheffieldML/GPy.git
synced 2026-05-15 06:52:39 +02:00
SCG optimizer now greatly improved in printing
This commit is contained in:
parent
3ad48534c8
commit
69e31f3dc1
1 changed files with 7 additions and 9 deletions
|
|
@ -35,7 +35,7 @@ def exponents(fnow, current_grad):
|
||||||
exps = [np.abs(fnow), current_grad]
|
exps = [np.abs(fnow), current_grad]
|
||||||
return np.sign(exps) * np.log10(exps).astype(int)
|
return np.sign(exps) * np.log10(exps).astype(int)
|
||||||
|
|
||||||
def SCG(f, gradf, x, optargs=(), maxiters=500, max_f_eval=500, display=True, xtol=None, ftol=None, gtol=None):
|
def SCG(f, gradf, x, optargs=(), maxiters=500, max_f_eval=np.inf, display=True, xtol=None, ftol=None, gtol=None):
|
||||||
"""
|
"""
|
||||||
Optimisation through Scaled Conjugate Gradients (SCG)
|
Optimisation through Scaled Conjugate Gradients (SCG)
|
||||||
|
|
||||||
|
|
@ -68,7 +68,7 @@ def SCG(f, gradf, x, optargs=(), maxiters=500, max_f_eval=500, display=True, xto
|
||||||
nsuccess = 0 # nsuccess counts number of successes.
|
nsuccess = 0 # nsuccess counts number of successes.
|
||||||
beta = 1.0 # Initial scale parameter.
|
beta = 1.0 # Initial scale parameter.
|
||||||
betamin = 1.0e-60 # Lower bound on scale.
|
betamin = 1.0e-60 # Lower bound on scale.
|
||||||
betamax = 1.0e100 # Upper bound on scale.
|
betamax = 1.0e50 # Upper bound on scale.
|
||||||
status = "Not converged"
|
status = "Not converged"
|
||||||
|
|
||||||
flog = [fold]
|
flog = [fold]
|
||||||
|
|
@ -109,9 +109,9 @@ def SCG(f, gradf, x, optargs=(), maxiters=500, max_f_eval=500, display=True, xto
|
||||||
fnew = f(xnew, *optargs)
|
fnew = f(xnew, *optargs)
|
||||||
function_eval += 1
|
function_eval += 1
|
||||||
|
|
||||||
if function_eval >= max_f_eval:
|
# if function_eval >= max_f_eval:
|
||||||
status = "maximum number of function evaluations exceeded"
|
# status = "maximum number of function evaluations exceeded"
|
||||||
break
|
# break
|
||||||
# return x, flog, function_eval, status
|
# return x, flog, function_eval, status
|
||||||
|
|
||||||
Delta = 2.*(fnew - fold) / (alpha * mu)
|
Delta = 2.*(fnew - fold) / (alpha * mu)
|
||||||
|
|
@ -131,13 +131,12 @@ def SCG(f, gradf, x, optargs=(), maxiters=500, max_f_eval=500, display=True, xto
|
||||||
if display:
|
if display:
|
||||||
print_out(len_maxiters, fnow, current_grad, beta, iteration)
|
print_out(len_maxiters, fnow, current_grad, beta, iteration)
|
||||||
n_exps = exponents(fnow, current_grad)
|
n_exps = exponents(fnow, current_grad)
|
||||||
if iteration - p_iter >= 6:
|
if iteration - p_iter >= 20 * np.random.rand():
|
||||||
a = iteration >= p_iter * 2.78
|
a = iteration >= p_iter * 2.78
|
||||||
b = np.any(n_exps < exps)
|
b = np.any(n_exps < exps)
|
||||||
if a or b:
|
if a or b:
|
||||||
print ''
|
|
||||||
if a:
|
|
||||||
p_iter = iteration
|
p_iter = iteration
|
||||||
|
print ''
|
||||||
if b:
|
if b:
|
||||||
exps = n_exps
|
exps = n_exps
|
||||||
|
|
||||||
|
|
@ -184,7 +183,6 @@ def SCG(f, gradf, x, optargs=(), maxiters=500, max_f_eval=500, display=True, xto
|
||||||
status = "maxiter exceeded"
|
status = "maxiter exceeded"
|
||||||
|
|
||||||
if display:
|
if display:
|
||||||
print ""
|
|
||||||
print_out(len_maxiters, fnow, current_grad, beta, iteration)
|
print_out(len_maxiters, fnow, current_grad, beta, iteration)
|
||||||
print ""
|
print ""
|
||||||
print status
|
print status
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue