Defined in tensorflow/contrib/metrics/python/ops/

See the guide: Metrics (contrib) > Metric Ops

Computes Pearson correlation coefficient between predictions, labels.

The streaming_pearson_correlation function delegates to streaming_covariance the tracking of three [co]variances:

  • streaming_covariance(predictions, labels), i.e. covariance
  • streaming_covariance(predictions, predictions), i.e. variance
  • streaming_covariance(labels, labels), i.e. variance

The product-moment correlation ultimately returned is an idempotent operation cov(predictions, labels) / sqrt(var(predictions) * var(labels)). To facilitate correlation computation across multiple batches, the function groups the update_ops of the underlying streaming_covariance and returns an update_op.

If weights is not None, then it is used to compute a weighted correlation. NOTE: these weights are treated as "frequency weights", as opposed to "reliability weights". See discussion of the difference on


  • predictions: A Tensor of arbitrary size.
  • labels: A Tensor of the same size as predictions.
  • weights: Optional Tensor indicating the frequency with which an example is sampled. Rank must be 0, or the same rank as labels, and must be broadcastable to labels (i.e., all dimensions must be either 1, or the same as the corresponding labels dimension).
  • metrics_collections: An optional list of collections that the metric value variable should be added to.
  • updates_collections: An optional list of collections that the metric update ops should be added to.
  • name: An optional variable_scope name.


  • pearson_r: A Tensor representing the current Pearson product-moment correlation coefficient, the value of cov(predictions, labels) / sqrt(var(predictions) * var(labels)).
  • update_op: An operation that updates the underlying variables appropriately.


  • ValueError: If labels and predictions are of different sizes, or if weights is the wrong size, or if either metrics_collections or updates_collections are not a list or tuple.