objective function seperate from calls for optimizer

This commit is contained in:
Max Zwiessele 2014-03-24 13:32:56 +00:00
parent 6b8e418597
commit 3db095338d

View file

@ -176,7 +176,7 @@ class Model(Parameterized):
(including the MAP prior), so we return it here. If your model is not (including the MAP prior), so we return it here. If your model is not
probabilistic, just return your gradient here! probabilistic, just return your gradient here!
""" """
return self._log_likelihood_gradients() + self._log_prior_gradients() return -(self._log_likelihood_gradients() + self._log_prior_gradients())
def _grads(self, x): def _grads(self, x):
""" """
@ -191,13 +191,13 @@ class Model(Parameterized):
""" """
try: try:
self._set_params_transformed(x) self._set_params_transformed(x)
obj_grads = -self._transform_gradients(self.objective_function_gradients()) obj_grads = self._transform_gradients(self.objective_function_gradients())
self._fail_count = 0 self._fail_count = 0
except (LinAlgError, ZeroDivisionError, ValueError): except (LinAlgError, ZeroDivisionError, ValueError):
if self._fail_count >= self._allowed_failures: if self._fail_count >= self._allowed_failures:
raise raise
self._fail_count += 1 self._fail_count += 1
obj_grads = np.clip(-self._transform_gradients(self.objective_function_gradients()), -1e100, 1e100) obj_grads = np.clip(self._transform_gradients(self.objective_function_gradients()), -1e100, 1e100)
return obj_grads return obj_grads
def _objective(self, x): def _objective(self, x):
@ -226,14 +226,14 @@ class Model(Parameterized):
def _objective_grads(self, x): def _objective_grads(self, x):
try: try:
self._set_params_transformed(x) self._set_params_transformed(x)
obj_f, obj_grads = self.objective_function(), self.objective_function_gradients() obj_f, obj_grads = self.objective_function(), self._transform_gradients(self.objective_function_gradients())
self._fail_count = 0 self._fail_count = 0
except (LinAlgError, ZeroDivisionError, ValueError): except (LinAlgError, ZeroDivisionError, ValueError):
if self._fail_count >= self._allowed_failures: if self._fail_count >= self._allowed_failures:
raise raise
self._fail_count += 1 self._fail_count += 1
obj_f = np.inf obj_f = np.inf
obj_grads = np.clip(-self._transform_gradients(self.objective_function_gradients()), -1e100, 1e100) obj_grads = np.clip(self._transform_gradients(self.objective_function_gradients()), -1e100, 1e100)
return obj_f, obj_grads return obj_f, obj_grads
def optimize(self, optimizer=None, start=None, **kwargs): def optimize(self, optimizer=None, start=None, **kwargs):