2017-10-11 5 views
0

私はテンソルフロープロセスを研究していますが、プロセスを理解するための多くの硬度があります。テンソルフロー、ノードが死んでいます

  1. 私が完全に理解していない用語の1つはノードです。ソースコード(C++コア)には、さまざまなタイプのノードがたくさんあります。しかし、私は死んだノードに興味があります。定数ノードとは異なります。私は、デッドノードの存在の理由、つまりデッドノードの役割を知りたい。

  2. ライブデータとデッドデータは何ですか?これは、使用されていないデータと既に使用されているデータのどちらですか? ...私はまだこの用語について完全に理解していないと思う。しかし、私は正確に知りたい、私はこれらの質問はtensorflowを研究するためのとても基本的なことができると思い関数ActivateNodes()(executor.cc)

で示すことができます。

おかげで、すべての

答えて

0

まず、死んだテンソルはTensorFlowの制御フロー構造の実装の詳細です:tf.cond()tf.while_loop()。これらの構成により、TensorFlowはデータ依存の値に基づいてサブグラフを実行するかどうかを決定できます。

もっと簡単なケースを考えてみましょう。tf.cond(pred, true_fn, false_fn)predの値は、true_fnまたはfalse_fnのopsが実行されるかどうかを決定します。現在の実装では、predSwitch opに入力します。これは、一方の入力に正規のテンソルを送り、もう一方の入力にデッドテンソルを送ります。 predが真である場合、デッドテンソルはoutput_false(またはその逆)に送信されます。の実装はoutput_trueに依存し、false_fnのopsはoutput_falseに依存するように実装されます。

テンソルが入力の1つとしてデッドテンソルを受け取った場合、それは実行されません。代わりに、すべての出力に対してデッドテンソルを送信します。このデッドテンソル伝播により、適切なブランチ内のオペレーションのみが実行されます。

tf.cond()は、デッドテンソルが出力まで完全に伝搬するのをどのように停止しますか? Merge opと呼ばれる第2の特殊動作は、異なる入力を異なる方法で処理します。 A Merge opには2つ以上の入力があり、の入力を除いて、すべてがの入力を失うことが予想されます。それは次に、非デッド入力をその出力に転送する。 tf.cond()は opsを使用してtrue_fnfalse_fnの結果を結合するので、取り出したブランチの結果は全体のtf.cond()サブグラフの出力として返されます。

+0

返信いただきありがとうございます。しかし、私はあなたの答えを完全に理解していませんでした。 私はひとつ質問できますか? 私が理解しているように、tf.cond()では、switch演算子とMerge演算子はpredに従って適切な結果を適用するために使用されます。 しかし、私はデッドテンソル伝搬についてはわかりません。 Merge opが存在しない場合、テンソルは入力としてデッドテンソルを受け取り、テンソルはすべてのデッドテンソルを出力します。この点で、なぜ彼らはデッドテンソルを出力するのですか?デッドテンソルを取り除くだけの方法はありますか? – jwl1993

+0

私は何を尋ねるのか疑問に思っています。次の反復がどのような状態に変わるかわからないので、取り除くことは不可能だと思うので、デッドテンソルを手動で管理することはできません。デッドテンソル出力に別のプロセスがある場合は、送信プロセスも必要です。私は正しい方向にいるのだろうか? – jwl1993

+0

右の 'Merge' opは、デッドテンソルを"削除 "できる唯一のサポートされているメカニズムです。複数のプロセスがある場合、標準の 'Send'と' Recv'オペレーションを使用してそれらの間にデッドテンソルを送ることができます。 – mrry

関連する問題