'Evaluate a model in softmax mode.
Adds char, word recall and sequence error rate events to the sw summary
writer, and returns them as well
TODO(rays) Add LogisticEval.
Args:
sess:  A tensor flow Session.
model: The model to run in the session. Requires a VGSLImageModel or any
other class that has a using_ctc attribute and a RunAStep(sess) method
that reurns a softmax result with corresponding labels.
num_steps: Number of steps to evaluate for.
Returns:
ErrorRates named tuple.
Raises:
ValueError: If an unsupported number of dimensions is used.'

def SoftmaxEval(self, sess, model, num_steps):

    coord = tf.train.Coordinator()
    threads = tf.train.start_queue_runners(sess=sess, coord=coord)
    total_label_counts = ec.ErrorCounts(0, 0, 0, 0)
    total_word_counts = ec.ErrorCounts(0, 0, 0, 0)
    sequence_errors = 0
    for _ in xrange(num_steps):
        (softmax_result, labels) = model.RunAStep(sess)
        predictions = softmax_result.argmax(axis=(-1))
        num_dims = (len(predictions.shape) - 1)
        batch_size = predictions.shape[0]
        null_label = (softmax_result.shape[(-1)] - 1)
        for b in xrange(batch_size):
            if (num_dims == 2):
                raise ValueError('2-d    label    data    not    supported    yet!')
            else:
                if (num_dims == 1):
                    pred_batch = predictions[b, :]
                    labels_batch = labels[b, :]
                else:
                    pred_batch = [predictions[b]]
                    labels_batch = [labels[b]]
                text = self.StringFromCTC(pred_batch, model.using_ctc, null_label)
                truth = self.StringFromCTC(labels_batch, False, null_label)
                total_word_counts = ec.AddErrors(total_word_counts, ec.CountWordErrors(text, truth))
                total_label_counts = ec.AddErrors(total_label_counts, ec.CountErrors(text, truth))
                if (text != truth):
                    sequence_errors += 1
    coord.request_stop()
    coord.join(threads)
    return ec.ComputeErrorRates(total_label_counts, total_word_counts, sequence_errors, (num_steps * batch_size))
