title: Custom metrics with tf.estimator
body: <p>I want tensorflow to calculate the coefficient of determination (R squared) during evaluation of my estimator. I tried to implement it in the following way loosly based on the implementation of the official metrics:</p>
  
  <pre><code>def r_squared(labels, predictions, weights=None,
                metrics_collections=None,
                updates_collections=None,
                name=None):
  
      total_error = tf.reduce_sum(tf.square(labels - tf.reduce_mean(labels)))
      unexplained_error = tf.reduce_sum(tf.square(labels - predictions))
      r_sq = 1 - tf.div(unexplained_error, total_error)
  
      # update_rsq_op = ?
  
      if metrics_collections:
          ops.add_to_collections(metrics_collections, r_sq)
  
      # if updates_collections:
      #     ops.add_to_collections(updates_collections, update_rsq_op)
  
      return r_sq #, update_rsq_op
  </code></pre>
  
  <p>Then, I use this function as a metric in the EstimatorSpec:</p>
  
  <pre><code>estim_specs = tf.estimator.EstimatorSpec(
      ...
      eval_metric_ops={
          'r_squared': r_squared(labels, predictions),
          ...
      })
  </code></pre>
  
  <p>However, this fails since my implementation of R squared doesn't return an update_op.</p>
  
  <pre><code>TypeError: Values of eval_metric_ops must be (metric_value, update_op) tuples, given: Tensor("sub_4:0", dtype=float64) for key: r_squared
  </code></pre>
  
  <p>Now I wonder, what exactly is the update_op supposed to do? Do I actually need to implement an update_op or can I somehow create some kind of dummy update_op? And if it is necessary, how would I implement it?</p>