Как закрыть или сбросить потоковые операции в тензорном потоке? - PullRequest
0 голосов
/ 02 мая 2018

Tensorflow предоставляет все виды приятных потоковых операций для агрегирования статистики по пакетам, например tf.metrics.mean.

Однако я считаю, что накопление всех значений с самого начала часто не имеет большого смысла. Например, можно было бы хотеть иметь статистику за эпоху или любое другое временное окно, которое имеет смысл в данном контексте.

Есть ли способ ограничить историю такой потоковой статистики, например, путем сброса потоковых операций, чтобы они начинались с накопления?

обходные:

  • накапливать вручную по партии
  • использовать "мягкое" скользящее окно, используя EMA

Ответы [ 2 ]

0 голосов
/ 07 мая 2018

Метрики в tf.contrib.eager.metrics (которые работают как с активным исполнением, так и без него) имеют опцию init_variable(), которую вы можете вызвать, если хотите сбросить их внутренние переменные.

0 голосов
/ 02 мая 2018

Один из способов сделать это - вызвать инициализатор соответствующих переменных в поточной операции. Например,

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...