mirror of
https://github.com/SheffieldML/GPy.git
synced 2026-05-21 14:05:14 +02:00
gradchecker now with fixed inputs
This commit is contained in:
parent
9eef4ebded
commit
32491abaff
2 changed files with 10 additions and 6 deletions
|
|
@ -416,7 +416,7 @@ class Model(Parameterized):
|
||||||
else:
|
else:
|
||||||
# check the gradient of each parameter individually, and do some pretty printing
|
# check the gradient of each parameter individually, and do some pretty printing
|
||||||
try:
|
try:
|
||||||
names = self._get_param_names_transformed()
|
names = self._get_param_names()
|
||||||
except NotImplementedError:
|
except NotImplementedError:
|
||||||
names = ['Variable %i' % i for i in range(len(x))]
|
names = ['Variable %i' % i for i in range(len(x))]
|
||||||
# Prepare for pretty-printing
|
# Prepare for pretty-printing
|
||||||
|
|
@ -436,7 +436,8 @@ class Model(Parameterized):
|
||||||
else:
|
else:
|
||||||
param_list = self._raveled_index_for(target_param)
|
param_list = self._raveled_index_for(target_param)
|
||||||
if self._has_fixes():
|
if self._has_fixes():
|
||||||
param_list = param_list[self._fixes_]
|
param_list = np.intersect1d(param_list, np.r_[:self.size][self._fixes_], True)
|
||||||
|
|
||||||
if not np.any(param_list):
|
if not np.any(param_list):
|
||||||
print "No free parameters to check"
|
print "No free parameters to check"
|
||||||
return
|
return
|
||||||
|
|
@ -444,7 +445,7 @@ class Model(Parameterized):
|
||||||
gradient = self.objective_function_gradients(x)
|
gradient = self.objective_function_gradients(x)
|
||||||
np.where(gradient==0, 1e-312, gradient)
|
np.where(gradient==0, 1e-312, gradient)
|
||||||
|
|
||||||
for i in param_list:
|
for i, ind in enumerate(param_list):
|
||||||
xx = x.copy()
|
xx = x.copy()
|
||||||
xx[i] += step
|
xx[i] += step
|
||||||
f1, g1 = self.objective_and_gradients(xx)
|
f1, g1 = self.objective_and_gradients(xx)
|
||||||
|
|
@ -456,9 +457,9 @@ class Model(Parameterized):
|
||||||
difference = np.abs((f1 - f2) / 2 / step - gradient[i])
|
difference = np.abs((f1 - f2) / 2 / step - gradient[i])
|
||||||
|
|
||||||
if (np.abs(1. - ratio) < tolerance) or np.abs(difference) < tolerance:
|
if (np.abs(1. - ratio) < tolerance) or np.abs(difference) < tolerance:
|
||||||
formatted_name = "\033[92m {0} \033[0m".format(names[i])
|
formatted_name = "\033[92m {0} \033[0m".format(names[ind])
|
||||||
else:
|
else:
|
||||||
formatted_name = "\033[91m {0} \033[0m".format(names[i])
|
formatted_name = "\033[91m {0} \033[0m".format(names[ind])
|
||||||
r = '%.6f' % float(ratio)
|
r = '%.6f' % float(ratio)
|
||||||
d = '%.6f' % float(difference)
|
d = '%.6f' % float(difference)
|
||||||
g = '%.6f' % gradient[i]
|
g = '%.6f' % gradient[i]
|
||||||
|
|
|
||||||
|
|
@ -312,8 +312,11 @@ class Parameterized(Constrainable, Pickleable, Observable, Gradcheckable):
|
||||||
#===========================================================================
|
#===========================================================================
|
||||||
# Optimization handles:
|
# Optimization handles:
|
||||||
#===========================================================================
|
#===========================================================================
|
||||||
def _get_param_names_transformed(self):
|
def _get_param_names(self):
|
||||||
n = numpy.array([p.name_hirarchical+'['+str(i)+']' for p in self.flattened_parameters for i in p._indices()])
|
n = numpy.array([p.name_hirarchical+'['+str(i)+']' for p in self.flattened_parameters for i in p._indices()])
|
||||||
|
return n
|
||||||
|
def _get_param_names_transformed(self):
|
||||||
|
n = self._get_param_names()
|
||||||
if self._has_fixes():
|
if self._has_fixes():
|
||||||
return n[self._fixes_]
|
return n[self._fixes_]
|
||||||
return n
|
return n
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue