Ejemplo n.º 1
0
    def create_eval_loop_fn(self, has_state: bool):
        """Creates an eval loop from the current step function and options.

    Args:
      has_state: If the step function has state, state will be kept in the loop.

    Returns:
      The eval loop function, i.e. wrapper of multiple eval steps.
    """
        eval_step_fn = self.eval_step
        if self._eval_options.use_tf_while_loop:
            # TODO(b/176126742): tf.while_loop doesn't support `None` as a loop input
            # even when it is not used inside the loop. To workaround this limitation,
            # we have to build two tf.functions for it.
            if has_state:
                loop_fn = loop_fns.create_tf_while_loop_fn_with_state(
                    eval_step_fn)
            else:
                loop_fn = loop_fns.create_tf_while_loop_fn(eval_step_fn)
            loop_fn = tf.function(loop_fn)
        else:
            if self._eval_options.use_tf_function:
                eval_step_fn = tf.function(eval_step_fn)
            loop_fn = loop_fns.create_loop_fn(eval_step_fn)
        return loop_fn
Ejemplo n.º 2
0
def _create_eval_loop_fn(eval_step_fn, has_state: bool,
                         options: StandardEvaluatorOptions):
    """Create evaluation loop function."""
    if options.use_tf_while_loop:
        # TODO(b/176126742): tf.while_loop doesn't support `None` as a loop input
        # even when it is not used inside the loop. To workaround this limitation,
        # we have to build two tf.functions for it.
        if has_state:
            loop_fn = loop_fns.create_tf_while_loop_fn_with_state(eval_step_fn)
        else:
            loop_fn = loop_fns.create_tf_while_loop_fn(eval_step_fn)
        loop_fn = tf.function(loop_fn)
    else:
        if options.use_tf_function:
            eval_step_fn = tf.function(eval_step_fn)
        loop_fn = loop_fns.create_loop_fn(eval_step_fn)
    return loop_fn