如何在tensorflow中积累汇总统计信息

如何在tensorflow中积累汇总统计信息,tensorflow,Tensorflow,我正在收集每批tensorflow中的一组汇总统计数据 我想收集对测试集计算的相同摘要统计信息,但测试集太大,无法在一个批处理中处理 在迭代测试集时,有没有一种方便的方法来计算相同的摘要统计信息?看起来它是最近添加的。我在contrib(以及后来的主线代码)流式度量评估中发现了这一点 Keras版本(TF 2.0+): TF 1.x版本: (根据评论更新链接)另一种可能性是在tensorflow之外的测试批次上累积汇总,并在图中有一个虚拟变量,然后可以将累积结果分配给该虚拟变量。例如:假设您计

我正在收集每批tensorflow中的一组汇总统计数据

我想收集对测试集计算的相同摘要统计信息,但测试集太大,无法在一个批处理中处理


在迭代测试集时,有没有一种方便的方法来计算相同的摘要统计信息?

看起来它是最近添加的。我在contrib(以及后来的主线代码)流式度量评估中发现了这一点

Keras版本(TF 2.0+):

TF 1.x版本:


(根据评论更新链接)

另一种可能性是在tensorflow之外的测试批次上累积汇总,并在图中有一个虚拟变量,然后可以将累积结果分配给该虚拟变量。例如:假设您计算了几个批次的验证集损失,并希望得到平均值的摘要。您可以通过以下方式实现这一点:

with tf.name_scope('valid_loss'):
    v_loss = tf.Variable(tf.constant(0.0), trainable=False)
    self.v_loss_pl = tf.placeholder(tf.float32, shape=[], name='v_loss_pl')
    self.update_v_loss = tf.assign(v_loss, self.v_loss_pl, name='update_v_loss')

with tf.name_scope('valid_summaries'):
    v_loss_s = tf.summary.scalar('validation_loss', v_loss)
    self.valid_summaries = tf.summary.merge([v_loss_s], name='valid_summaries')
然后在评估时:

total_loss = 0.0
for batch in all_batches:
    loss, _ = sess.run([get_loss, ...], feed_dict={...})
    total_loss += loss
total_loss /= float(n_batches)

[_, v_summary_str] = sess.run([self.update_v_loss, self.valid_summaries],
                              feed_dict={self.v_loss_pl: total_loss})
writer.add_summary(v_summary_str)

虽然这项工作已经完成了,但无可否认,这感觉有点粗糙。您发布的contrib的流媒体度量评估可能要优雅得多——实际上,我从未见过它,所以很想看看它

在最初的帖子发布几个月后,一些部分离开了contrib:(供最终进入该页面的人参考)该链接似乎在2020年5月被中断。可能替换为?更新的链接(再次)。可能重复?这是一个重复的问题,但是被接受的答案没有提到流媒体平均值包,它现在已经移动到
tf.metrics
,但是有一个关于这个问题的新答案提到了它。