2016-03-03 26 views
0

當我嘗試寫出我以程序方式生成的多層網絡的直方圖摘要時,出現重複標記錯誤。我認爲這個問題可能與命名有關。試想一下,如下面的代碼:Histogram_summary尊重name_scope

with tf.name_scope(some_unique_name): 
    ... 
    _ = tf.histogram_summary('weights', kernel_weights) 

我天真地認爲「權重」將範圍限定爲some_unique_name但我懷疑,這是不是。摘要名稱是否與name_scope無關?

回答

1

他們是。

我和你在一起認爲這是一個bug,但我還沒有跑過op的設計者。繼續並在GitHub上爲它打開一個問題!

(我碰到這也並發現它非常惱人的 - 它可以防止模型的再利用而無需刻意進行參數彙總運算調用)

+0

我很快就增加了一個獨特的名字層到我的代碼和重複的標記錯誤就走了,這樣肯定爲什麼會發生。 – bobw

3

由於Dave points out,tag參數tf.histogram_summary(tag, ...)確實是獨立的當前名稱範圍。部分原因是tag可能是一個字符串Tensor(即通過圖的一部分計算),而名稱範圍是純粹的客戶端構造(即僅限於Python),因此沒有好方法可以使在兩種使用模式中確定範圍的工作一致。

但是,如果你使用TensorFlow從源代碼編譯(而且應該在未來的版本中提供,0.8.0),您可以使用下面的方法來範圍的標籤(使用Graph.unique_name(..., mark_as_used=False)):

with tf.name_scope(some_unique_name): 
    # ... 
    tf.histogram_summary(
     tf.get_default_graph().unique_name('weights', mark_as_used=False), 
     kernel_weights) 

或者,你可以在當前版本的下列內容:

with tf.name_scope(some_unique_name) as scope: 
    # ... 
    tf.histogram_summary(scope + 'weights', kernel_weights) 
+0

有趣。謝謝 - 我懷疑name_scope實際上並不是圖表的一部分。我在GitHub上記錄了一個bug,但我想這畢竟不是bug。在任何地方都必須攜帶範圍是一件令人失望的事情。我可以問什麼樣的名字unique_name構造? – bobw

+0

它應用與將'name =「foo」'作爲參數傳遞給op構造函數時使用的完全相同的邏輯。 (例如,它將'foo「附加到當前的名稱範圍,並且可能會添加'」_1「','_2」'等等,以使其在當前範圍內唯一)。如果這樣會變得很有用,我們可以製作一個實用的方法,使訪問更容易。 – mrry