'Constructs classifier evaluation graph.
Args:
dataset: the labeled dataset to evaluate, {\'train\', \'test\', \'valid\'}.
Returns:
eval_ops: dict<metric name, tuple(value, update_op)>
var_restore_dict: dict mapping variable restoration names to variables.
Trainable variables will be mapped to their moving average names.'

def eval_graph(self, dataset='test'):

    inputs = _inputs(dataset, pretrain=False, bidir=True)
    embedded = [self.layers['embedding'](inp.tokens) for inp in inputs]
    (_, next_states, logits, _) = self.cl_loss_from_embedding(embedded, inputs=inputs, return_intermediates=True)
    (f_inputs, _) = inputs
    eval_ops = {'accuracy': tf.contrib.metrics.streaming_accuracy(layers_lib.predictions(logits), f_inputs.labels, f_inputs.weights)}
    saves = [inp.save_state(state) for (inp, state) in zip(inputs, next_states)]
    with tf.control_dependencies(saves):
        (acc, acc_update) = eval_ops['accuracy']
        acc_update = tf.identity(acc_update)
        eval_ops['accuracy'] = (acc, acc_update)
    var_restore_dict = make_restore_average_vars_dict()
    return (eval_ops, var_restore_dict)
