2017-10-08 60 views
0

我曾經在張量流圖中引入有向無環圖的印象。然而,同時探索通過https://github.com/nilboy/tensorflow-yolo產生的(相當大的)圖形我偶然在圖中的一環:張量流中的圖形環

1. gradients/b_count_62:0 -> gradients/b_count_62 
2. gradients/b_count_62 -> gradients/GreaterEqual_15:0 
3. gradients/GreaterEqual_15:0 -> gradients/GreaterEqual_15 
4. gradients/GreaterEqual_15 -> gradients/Merge_31:0, gradients/GreaterEqual_15/Enter:0 
5. gradients/Merge_31:0 -> gradients/Merge_31 
6. gradients/Merge_31 -> gradients/b_count_61:0, gradients/NextIteration_31:0 
7. gradients/NextIteration_31:0 -> gradients/NextIteration_31 
8. gradients/NextIteration_31 -> gradients/Sub_15:0 
9. gradients/Sub_15:0 -> gradients/Sub_15 
10. gradients/Sub_15 -> gradients/Switch_31:1, gradients/GreaterEqual_15/Enter:0 
11. gradients/Switch_31:1 -> gradients/Switch_31 
12. gradients/Switch_31 -> gradients/Merge_31:0, gradients/b_count_62:0 (loop, references line 5 and line 1) 

什麼OPS支持循環就像上面,如何在這些循環創建(蟒蛇),什麼是這些循環在會話中運行時的語義?

回答

0

他們被tf.while_loop創建語義遵循經典數據流的原語爲分佈式while循環,「TensorFlow:一種大型機器學習系統」的第3.4節(link)具有一定的參考

+0

也許我的問題沒有得到不夠具體 - 我想直接/從python分別創建這些操作。這似乎主要是無證的,但通過以下方法支持: op._add_input(張量,D型=無) op._update_input(索引,張量,D型=無) op._add_control_input(OPS) 我試着閱讀tf.while_loop的源代碼,但它非常複雜,我不知道它是如何使用這些(或其他)在圖中生成依賴性循環的。 –

+0

這些是「隱藏的」操作並且故意沒有記錄(任何未公開的文檔都不是API的一部分,並且可以隨時更改/刪除),因此閱讀源代碼可能是最好的方法。看起來tf.while_loop正在被淘汰,也就是說,看到這個[提交](https://github.com/tensorflow/tensorflow/commit/0fd2a74120b86972441378f79fb5d03e86fed856)進行替換。 'NextIteration'操作可能會保留,但需要更低級別的API來構建它們。 –

+0

PS,這裏是一個簡單的例子,直接構造合併/切換節點,以便實現某些圖的部分的惰性執行 - https://gist.github.com/yaroslavvb/d67410e240369736fc4ba0267250ef27 –