Exemple #1
0
def parse_results(results, names=None):
    #only single values in results!
    if names is None:
        return gezi.pretty_floats(results)
    else:
        if len(names) == len(results) - 1:
            names.insert(0, 'loss')
        if len(names) == len(results):
            return gezi.get_value_name_list(results, names)
        else:
            return gezi.pretty_floats(results)
Exemple #2
0
def print_results(results, names=None):
    """
  standard result print
  """
    results = gezi.get_singles(results)
    if names is None:
        print(gezi.pretty_floats(results))
    else:
        if len(names) == len(results) - 1:
            names.insert(0, 'loss')
        if len(names) == len(results):
            print(gezi.get_value_name_list(results, names))
        else:
            print(gezi.pretty_floats(results))
Exemple #3
0
def parse_results(results, names=None):
  if type(results[0]) is str:
    temp = results 
    results = names 
    names = temp
  #only single values in results!
  if names is None:
    return gezi.pretty_floats(results)
  else:
    if len(names) == len(results) - 1:
      names.insert(0, 'loss')
    if len(names) == len(results):
      return gezi.get_value_name_list(results, names)
    else:
      return gezi.pretty_floats(results)
Exemple #4
0
def value_name_list_str(results, names=None):
    if names is None:
        return gezi.pretty_floats(results)
    else:
        return gezi.get_value_name_list(results, names)
Exemple #5
0
def test_flow(ops,
              names=None,
              gen_feed_dict=None,
              deal_results=None,
              model_dir='./model',
              model_name=None,
              num_epochs=1,
              num_interval_steps=100,
              eval_times=0,
              print_avg_loss=True,
              sess=None):
    """
  test flow, @TODO improve list result print
  Args:
  ops: eval ops
  names: eval names
  model_path: can be dir like ./model will fetch lates model in model dir , or be real model path like ./model/model.0.ckpt
  @TODO num_epochs should be 1,but now has problem of loading model if set @FIXME, so now 0
  """
    if sess is None:
        sess = tf.InteractiveSession()
    melt.restore(sess, model_dir, model_name)

    if not os.path.isdir(model_dir):
        model_dir = os.path.dirname(model_dir)
    summary_op = tf.merge_all_summaries()
    summary_writer = tf.train.SummaryWriter(model_dir, sess.graph)

    coord = tf.train.Coordinator()
    threads = tf.train.start_queue_runners(sess=sess, coord=coord)
    try:
        step = 0
        eval_step = 0
        avg_eval = AvgScore()
        total_avg_eval = AvgScore()
        while not coord.should_stop():
            feed_dict = {} if gen_feed_dict is None else gen_feed_dict()
            results = sess.run(ops, feed_dict=feed_dict)
            if not isinstance(results, (list, tuple)):
                results = [results]

            if deal_results is not None:
                #@TODO may need to pass summary_writer, and step
                #use **args ?
                deal_results(results)

            if print_avg_loss:
                results = gezi.get_singles(results)
                avg_eval.add(results)
                total_avg_eval.add(results)
                if step % num_interval_steps == 0:
                    average_eval = avg_eval.avg_score()
                    print(
                        '{}: average evals = {}'.format(
                            gezi.now_time(),
                            melt.value_name_list_str(average_eval, names)),
                        'step:', step)
                    summary = tf.Summary()
                    summary_str = sess.run(summary_op, feed_dict=feed_dict)
                    summary.ParseFromString(summary_str)
                    for i in xrange(len(results)):
                        name = i if names is None else names[i]
                        summary.value.add(tag='metric{}'.format(name),
                                          simple_value=average_eval[i])
                    summary_writer.add_summary(summary, step)

                    if eval_step and eval_step == eval_times:
                        break
                    eval_step += 1
            step += 1
        print('Done testing for {} epochs, {} steps. AverageEvals:{}'.format(
            num_epochs, step, gezi.pretty_floats(total_avg_eval.avg_score())))
    except tf.errors.OutOfRangeError:
        print('Done testing for {} epochs, {} steps. AverageEvals:{}'.format(
            num_epochs, step, gezi.pretty_floats(total_avg_eval.avg_score())))
    finally:
        # When done, ask the threads to stop.
        coord.request_stop()
    # Wait for threads to finish.
    coord.join(threads)