2016-06-19 89 views
24

我經常想記錄python變量 - 與tf張量相反。如何手動創建tf.Summary()

在文檔中它說「你可以通過一個tf.Summary協議緩衝區,你用你自己的數據填充」但沒有文檔tf.Summary,我不知道如何使用它。

任何人都知道如何創建一個標量總結這種方式?

+2

可能重複的[如何將一個任意值添加到TensorFlow摘要?](http://stackoverflow.com/questions/37530228/how-do-i-add-an-arbitrary-value-to-a -tensorflow-summary) – orome

回答

40

你可以在你的Python程序創建一個tf.Summary對象,並將其寫入相同tf.train.SummaryWriter對象使用SummaryWriter.add_summary()方法需要你TensorFlow生產的摘要。

tf.Summary等級爲the Summary protocol bufferPython protocol buffer wrapper。每個Summary包含一個tf.Summary.Value協議緩衝區列表,每個協議緩衝區都有一個標記和一個「簡單」(浮點標量)值,一個image,一個histogramaudio snippet。例如,您可以通過以下方式生成從Python對象的標摘要:

writer = tf.train.SummaryWriter(...) 
value = 37.0 
summary = tf.Summary(value=[ 
    tf.Summary.Value(tag="summary_tag", simple_value=value), 
]) 
writer.add_summary(summary) 
+0

如何創建圖像摘要? – Marco

+1

我創建了一個顯示如何創建圖像摘要的要點: https://gist.github.com/gyglim/1f8dfb1b5c82627ae3efcfbbadb9f514#file-tensorboard_logging-py-L41 –

+0

每個時代最後三行是否完成? (我正在從keras做這件事,並試圖找出在哪裏放什麼 - 我猜我的回調'__init__'第1行,其餘'on_epoch_end()'?) –

4

如果你想記錄一個python值,你必須創建一個佔位符,在運行tf.Summary操作時必須被提供。

下面是一個代碼剪斷

value_ = tf.placeholder(tf.float32, []) 
summary_op = tf.scalar_summary("value_log", value_) 
my_python_variable = 10 
# define everything else you need... 
# ... 
with tf.Session() as sess: 
    for i in range(0, 10): 
     sess.run(summary_op, feed_dict={value_: my_python_variable*i}) 
+1

謝謝,但我明確要求一種方法來直接創建Summary protobuf,以便我可以避免這種繁瑣的方法。 –

1

我需要在訓練中做很多的更新定製摘要變量,這樣我實現了我的,像這樣:

之前循環:

writer = tf.summary.FileWriter(log_folder) 
accuracy = None 
accuracy_summary = tf.Summary() 
accuracy_summary.value.add(tag='accuracy', simple_value=accuracy) 

在循環中:

if i%20000 == 0: 
    accuracy = get_accuracy() 
    accuracy_summary.value[0].simple_value = accuracy 
    writer.add_summary(accuracy_summary, i) 

我假設指數爲value的順序是將變量添加到摘要中。