簡體   English   中英

如何在tensorflow中累積匯總統計信息

[英]How to accumulate summary statistics in tensorflow

我正在每批次在 tensorflow 中收集一組匯總統計信息。

我想收集在測試集上計算的相同匯總統計信息,但測試集太大而無法一次性處理。

當我遍歷測試集時,是否有一種方便的方法來計算相同的匯總統計數據?

好像是最近添加的。 我在 contrib(以及后來的主線代碼)、流式指標評估中發現了這一點。

Keras 版本(TF 2.0+): https : //www.tensorflow.org/api_docs/python/tf/keras/metrics

TF 1.x 版本: https : //www.tensorflow.org/versions/r1.15/api_docs/python/tf/metrics

(鏈接根據評論更新)

另一種可能性是在 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 中的流式指標評估可能要優雅得多 - 我實際上從未遇到過它,所以很想查看一下。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM