'Builds the forward network only without the training operation.
Args:
task_context: file path from which to read the task context.
batch_size: batch size to request from reader op.
evaluation_max_steps: max number of parsing actions during evaluation,
only used in beam parsing.
corpus_name: name of the task input to read parses from.
Returns:
Dictionary of named eval nodes.'

def AddEvaluation(self, task_context, batch_size, evaluation_max_steps=300, corpus_name='documents'):

    def _AssignTransitionScores():
        return tf.assign(nodes['transition_scores'], nodes['logits'], validate_shape=False)
    def _Pass():
        return tf.constant((-1.0))
    unused_evaluation_max_steps = evaluation_max_steps
    with tf.name_scope('evaluation'):
        nodes = self.evaluation
        nodes['transition_scores'] = self._AddVariable([batch_size, self._num_actions], tf.float32, 'transition_scores', tf.constant_initializer((-1.0)))
        nodes.update(self._AddDecodedReader(task_context, batch_size, nodes['transition_scores'], corpus_name))
        nodes.update(self._BuildNetwork(nodes['feature_endpoints'], return_average=self._use_averaging))
        nodes['eval_metrics'] = cf.with_dependencies([tf.cond(tf.greater(tf.size(nodes['logits']), 0), _AssignTransitionScores, _Pass)], nodes['eval_metrics'], name='eval_metrics')
    return nodes
