Tensorflow provides all sorts of nice streaming operations to aggregate statistics along batches, such as tf.metrics.mean
.
However I find that accumulating
One way to do it is to call the initializer of the relevant variables in the streaming op. For example,
import tensorflow as tf
x = tf.random_normal(())
mean_x, update_op = tf.metrics.mean(x, name='mean_x')
# get the initializers of the local variables (total and count)
my_metric_variables = [v for v in tf.local_variables() if v.name.startswith('mean_x/')]
# or maybe just
# my_metric_variables = tf.get_collection('metric_variables')
reset_ops = [v.initializer for v in my_metric_variables]
with tf.Session() as sess:
tf.local_variables_initializer().run()
for _ in range(100):
for _ in range(100):
sess.run(update_op)
print(sess.run(mean_x))
# if you comment the following out, the estimate of the mean converges to 0
sess.run(reset_ops)
The metrics in tf.contrib.eager.metrics
(which work both with and without eager execution) have a init_variable()
op you can call if you want to reset their internal variables.