tf_external_optimizer¶
TensorFlow interface for thirdparty optimizers.

class
zfit.minimizers.tf_external_optimizer.
ExternalOptimizerInterface
(loss, var_list=None, equalities=None, inequalities=None, var_to_bounds=None, **optimizer_kwargs)[source]¶ Bases:
object
Base class for interfaces with external optimization algorithms.
Subclass this and implement _minimize in order to wrap a new optimization algorithm.
ExternalOptimizerInterface should not be instantiated directly; instead use e.g. ScipyOptimizerInterface.
Initialize a new interface instance.
 Parameters
loss – A scalar Tensor to be minimized.
var_list – Optional list of Variable objects to update to minimize loss. Defaults to the list of variables collected in the graph under the key GraphKeys.TRAINABLE_VARIABLES.
equalities – Optional list of equality constraint scalar `Tensor`s to be held equal to zero.
inequalities – Optional list of inequality constraint scalar `Tensor`s to be held nonnegative.
var_to_bounds –
Optional dict where each key is an optimization Variable and each corresponding value is a length2 tuple of (low, high) bounds. Although enforcing this kind of simple constraint could be accomplished with the inequalities arg, not all optimization algorithms support general inequality constraints, e.g. LBFGSB. Both low and high can either be numbers or anything convertible to a NumPy array that can be broadcast to the shape of var (using np.broadcast_to). To indicate that there is no bound, use None (or +/ np.infty). For example, if var is a 2x3 matrix, then any of the following corresponding bounds could be supplied: * (0, np.infty): Each element of var held positive. * (np.infty, [1, 2]): First column less than 1, second column less
than 2.
(np.infty, [[1], [2], [3]]): First row less than 1, second row less than 2, etc.
(np.infty, [[1, 2, 3], [4, 5, 6]]): Entry var[0, 0] less than 1, var[0, 1] less than 2, etc.
**optimizer_kwargs – Other subclassspecific keyword arguments.

minimize
(feed_dict=None, fetches=None, step_callback=None, loss_callback=None, **run_kwargs)[source]¶ Minimize a scalar Tensor.
Variables subject to optimization are updated inplace at the end of optimization.
Note that this method does not just return a minimization Op, unlike Optimizer.minimize(); instead it actually performs minimization by executing commands to control a Session.
 Parameters
session – A Session instance.
feed_dict – A feed dict to be passed to calls to session.run.
fetches – A list of Tensor`s to fetch and supply to `loss_callback as positional arguments.
step_callback – A function to be called at each optimization step; arguments are the current values of all optimization variables flattened into a single vector.
loss_callback – A function to be called every time the loss and gradients are computed, with evaluated fetches supplied as positional arguments.
**run_kwargs – kwargs to pass to session.run.

class
zfit.minimizers.tf_external_optimizer.
ScipyOptimizerInterface
(loss, var_list=None, equalities=None, inequalities=None, var_to_bounds=None, **optimizer_kwargs)[source]¶ Bases:
zfit.minimizers.tf_external_optimizer.ExternalOptimizerInterface
Wrapper allowing scipy.optimize.minimize to operate a tf.compat.v1.Session.
Example:
```python vector = tf.Variable([7., 7.], ‘vector’)
# Make vector norm as small as possible. loss = tf.reduce_sum(tf.square(vector))
optimizer = ScipyOptimizerInterface(loss, options={‘maxiter’: 100})
 with tf.compat.v1.Session() as session:
optimizer.minimize(session)
# The value of vector should now be [0., 0.]. ```
Example with simple bound constraints:
```python vector = tf.Variable([7., 7.], ‘vector’)
# Make vector norm as small as possible. loss = tf.reduce_sum(tf.square(vector))
 optimizer = ScipyOptimizerInterface(
loss, var_to_bounds={vector: ([1, 2], np.infty)})
 with tf.compat.v1.Session() as session:
optimizer.minimize(session)
# The value of vector should now be [1., 2.]. ```
Example with more complicated constraints:
```python vector = tf.Variable([7., 7.], ‘vector’)
# Make vector norm as small as possible. loss = tf.reduce_sum(tf.square(vector)) # Ensure the vector’s y component is = 1. equalities = [vector[1]  1.] # Ensure the vector’s x component is >= 1. inequalities = [vector[0]  1.]
# Our default SciPy optimization algorithm, LBFGSB, does not support # general constraints. Thus we use SLSQP instead. optimizer = ScipyOptimizerInterface(
loss, equalities=equalities, inequalities=inequalities, method=’SLSQP’)
 with tf.compat.v1.Session() as session:
optimizer.minimize(session)
# The value of vector should now be [1., 1.]. ```
Initialize a new interface instance.
 Parameters
loss – A scalar Tensor to be minimized.
var_list – Optional list of Variable objects to update to minimize loss. Defaults to the list of variables collected in the graph under the key GraphKeys.TRAINABLE_VARIABLES.
equalities – Optional list of equality constraint scalar `Tensor`s to be held equal to zero.
inequalities – Optional list of inequality constraint scalar `Tensor`s to be held nonnegative.
var_to_bounds –
Optional dict where each key is an optimization Variable and each corresponding value is a length2 tuple of (low, high) bounds. Although enforcing this kind of simple constraint could be accomplished with the inequalities arg, not all optimization algorithms support general inequality constraints, e.g. LBFGSB. Both low and high can either be numbers or anything convertible to a NumPy array that can be broadcast to the shape of var (using np.broadcast_to). To indicate that there is no bound, use None (or +/ np.infty). For example, if var is a 2x3 matrix, then any of the following corresponding bounds could be supplied: * (0, np.infty): Each element of var held positive. * (np.infty, [1, 2]): First column less than 1, second column less
than 2.
(np.infty, [[1], [2], [3]]): First row less than 1, second row less than 2, etc.
(np.infty, [[1, 2, 3], [4, 5, 6]]): Entry var[0, 0] less than 1, var[0, 1] less than 2, etc.
**optimizer_kwargs – Other subclassspecific keyword arguments.

minimize
(feed_dict=None, fetches=None, step_callback=None, loss_callback=None, **run_kwargs)¶ Minimize a scalar Tensor.
Variables subject to optimization are updated inplace at the end of optimization.
Note that this method does not just return a minimization Op, unlike Optimizer.minimize(); instead it actually performs minimization by executing commands to control a Session.
 Parameters
session – A Session instance.
feed_dict – A feed dict to be passed to calls to session.run.
fetches – A list of Tensor`s to fetch and supply to `loss_callback as positional arguments.
step_callback – A function to be called at each optimization step; arguments are the current values of all optimization variables flattened into a single vector.
loss_callback – A function to be called every time the loss and gradients are computed, with evaluated fetches supplied as positional arguments.
**run_kwargs – kwargs to pass to session.run.