From f194b0b1de68514cf0434ca39622342702c8f061 Mon Sep 17 00:00:00 2001 From: Seth Troisi Date: Tue, 24 Sep 2019 23:58:03 -0700 Subject: [PATCH 1/2] add avg_stones commands --- dual_net.py | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/dual_net.py b/dual_net.py index a23902658..1b466084d 100644 --- a/dual_net.py +++ b/dual_net.py @@ -284,10 +284,13 @@ def model_fn(features, labels, mode, params): train_op = optimizer.minimize(combined_cost, global_step=global_step) # Computations to be executed on CPU, outside of the main TPU queues. - def eval_metrics_host_call_fn(policy_output, value_output, pi_tensor, - value_tensor, policy_cost, value_cost, - l2_cost, combined_cost, step, - est_mode=tf.estimator.ModeKeys.TRAIN): + def eval_metrics_host_call_fn( + features, + policy_output, value_output, + pi_tensor, value_tensor, + policy_cost, value_cost, + l2_cost, combined_cost, + step, est_mode=tf.estimator.ModeKeys.TRAIN): policy_entropy = -tf.reduce_mean(tf.reduce_sum( policy_output * tf.log(policy_output), axis=1)) # pi_tensor is one_hot when generated from sgfs (for supervised learning) @@ -306,6 +309,8 @@ def eval_metrics_host_call_fn(policy_output, value_output, pi_tensor, value_cost_normalized = value_cost / params['value_cost_weight'] avg_value_observed = tf.reduce_mean(value_tensor) + avg_stones_black = tf.reduce_mean(tf.reduce_sum(features[:,:,:,1], [1,2])) + avg_stones_white = tf.reduce_mean(tf.reduce_sum(features[:,:,:,0], [1,2])) with tf.variable_scope('metrics'): metric_ops = { @@ -315,13 +320,17 @@ def eval_metrics_host_call_fn(policy_output, value_output, pi_tensor, 'l2_cost': tf.metrics.mean(l2_cost), 'policy_entropy': tf.metrics.mean(policy_entropy), 'combined_cost': tf.metrics.mean(combined_cost), - 'avg_value_observed': tf.metrics.mean(avg_value_observed), 'policy_accuracy_top_1': tf.metrics.mean(policy_output_in_top1), 'policy_accuracy_top_3': tf.metrics.mean(policy_output_in_top3), 'policy_top_1_confidence': tf.metrics.mean(policy_top_1_confidence), + 'value_confidence': tf.metrics.mean(tf.abs(value_output)), + + # Metrics about input data 'policy_target_top_1_confidence': tf.metrics.mean( policy_target_top_1_confidence), - 'value_confidence': tf.metrics.mean(tf.abs(value_output)), + 'avg_value_observed': tf.metrics.mean(avg_value_observed), + 'avg_stones_black': tf.metrics.mean(avg_stones_black), + 'avg_stones_white': tf.metrics.mean(avg_stones_white), } if est_mode == tf.estimator.ModeKeys.EVAL: @@ -349,6 +358,7 @@ def eval_metrics_host_call_fn(policy_output, value_output, pi_tensor, return summary.all_summary_ops() + [cond_reset_op] metric_args = [ + features, policy_output, value_output, labels['pi_tensor'], From 65f873a692a54713d50eb666e6fce3ce46808b01 Mon Sep 17 00:00:00 2001 From: Seth Troisi Date: Sat, 28 Sep 2019 02:45:37 -0700 Subject: [PATCH 2/2] Change avg_stones to histogram --- dual_net.py | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/dual_net.py b/dual_net.py index 1b466084d..83007a2ac 100644 --- a/dual_net.py +++ b/dual_net.py @@ -285,7 +285,7 @@ def model_fn(features, labels, mode, params): # Computations to be executed on CPU, outside of the main TPU queues. def eval_metrics_host_call_fn( - features, + avg_stones, avg_stones_delta, policy_output, value_output, pi_tensor, value_tensor, policy_cost, value_cost, @@ -309,8 +309,6 @@ def eval_metrics_host_call_fn( value_cost_normalized = value_cost / params['value_cost_weight'] avg_value_observed = tf.reduce_mean(value_tensor) - avg_stones_black = tf.reduce_mean(tf.reduce_sum(features[:,:,:,1], [1,2])) - avg_stones_white = tf.reduce_mean(tf.reduce_sum(features[:,:,:,0], [1,2])) with tf.variable_scope('metrics'): metric_ops = { @@ -329,8 +327,7 @@ def eval_metrics_host_call_fn( 'policy_target_top_1_confidence': tf.metrics.mean( policy_target_top_1_confidence), 'avg_value_observed': tf.metrics.mean(avg_value_observed), - 'avg_stones_black': tf.metrics.mean(avg_stones_black), - 'avg_stones_white': tf.metrics.mean(avg_stones_white), + 'avg_stones': tf.metrics.mean(tf.reduce_mean(avg_stones)), } if est_mode == tf.estimator.ModeKeys.EVAL: @@ -348,6 +345,8 @@ def eval_metrics_host_call_fn( for metric_name, metric_op in metric_ops.items(): summary.scalar(metric_name, metric_op[1], step=eval_step) + summary.histogram("avg_stones_delta", avg_stones_delta) + # Reset metrics occasionally so that they are mean of recent batches. reset_op = tf.variables_initializer(tf.local_variables('metrics')) cond_reset_op = tf.cond( @@ -357,8 +356,14 @@ def eval_metrics_host_call_fn( return summary.all_summary_ops() + [cond_reset_op] + # compute here to avoid sending all of features to cpu. + avg_stones_black = tf.reduce_sum(features[:,:,:,1], [1,2]) + avg_stones_white = tf.reduce_sum(features[:,:,:,0], [1,2]) + avg_stones = avg_stones_black + avg_stones_white + avg_stones_delta = avg_stones_black - avg_stones_white + metric_args = [ - features, + avg_stones, avg_stones_delta, policy_output, value_output, labels['pi_tensor'],