2017-10-08 7 views
0

テンソルフローグラフが有向非循環グラフであるという印象を受けました。 https://github.com/nilboy/tensorflow-yoloによって生成された(かなり大きい)のグラフを探索しながらしかし、私は、グラフのループにつまずい:テンソルフローのグラフループ

OPSは、これらのループは(のpythonから)作成されるか、上記のようなループをサポートし、どのようなものは何
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) 

そのようなループのセマンティクスはセッションで実行されるとき?ループしながら、分散のために

答えて

0

彼らがtf.while_loopによって作成され、意味論は、古典的なデータフロープリミティブに続く、「TensorFlow:大規模な機械学習のためのシステム」のセクション3.4(linkは)たぶん私の質問wasnいくつかの参照

+0

を持っています具体的には十分ではありません - 私はこれらのオペレーションをPythonから直接/別々に作成したいと思います。これは、主に文書化されていないようだが、次の方法でサポートされている: op._add_input(テンソル、DTYPE =なし) op._update_input(インデックス、テンソル、DTYPE =なし) 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 –

関連する問題