<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def evaluate_model(self, accuracy, num_steps, feed_vars=(), feed_data=None, summary_tag=None, print_every=0):
 """Evaluates the given model. Args: accuracy: The metric that is being evaluated or a tuple of metrics. num_steps: The number of steps to run in the evaluator. feed_vars: A list or tuple of the variables that will be fed. feed_data: A generator that produces tuples of the same length as feed_vars. summary_tag: If provided, the final result of running the model will be published to this tag. print_every: Print a summary every so many steps, use 0 to disable. Returns: The accuracy. Raises: ValueError: If the wrong number of summary tags are provided or previously running QueueRunners haven't been stopped. """

    if not hasattr(self, '_saver'):
      raise ValueError('Before evaluating, you must initialize the model with '
                       'load_from_checkpoint, prepare or saver.')
    self._run_init_test_vars_op()
    if (not isinstance(accuracy, collections.Sequence) or
        isinstance(accuracy, six.string_types)):
      accuracy = (accuracy,)
      if summary_tag:
        summary_tag = (summary_tag,)
    if summary_tag and len(summary_tag) != len(accuracy):
      raise ValueError(
          'If summaries are requested, there must be a tag per accuracy node.')

    result = self.run_model(accuracy,
                            num_steps,
                            feed_vars=feed_vars,
                            feed_data=feed_data,
                            print_every=print_every,
                            allow_initialize=False)
    assert len(result) == len(accuracy) + 1, (
        'results is wrong length, was %s but should be 1 longer than %s' %
        (result, accuracy))
    if summary_tag:
      self.add_summaries(result[0], *zip(summary_tag, result[1:]))
    return result[1:]