2017-12-12 7 views
1

コードを見てみましょう。私たちが知っているようにtf.Printでtf.condを使う方法を理解するには?

import tensorflow as tf 

x = tf.constant(1.0) 
y = tf.constant(2.0) 
z = tf.constant(3.0) 
def f1(): 
    return tf.Print(x, [x]) 

def f2(): 
    return tf.Print(z, [z]) 
op = tf.cond(x>y, f1, f2) 
with tf.Session() as sess: 
    sess.run(op) 

私は非常に困惑してる、tf.Printの出力は3.0

で、tf.Print(Z、[Z])が出力されます値zの場合はzと評価されますが、私は評価していないと思います。z

もう一つの問題は、それがグラフ化するtf.Printを追加しない方法、たとえば、私はそれがそうでなければtf.Printが実行されることはありません、tf.Printのリターンでいくつかのテンソルを関連付ける必要があると考え、グラフ化するノードを追加しない方法についてtf.cond、です。

私はとても困惑しています。

+0

'tf.Print' OPのテンソル出力は、入力だと等しいです:あなたが書くことによって、任意の混乱を避けることができるようにはtensorflow 1.4以来、tf.condは、キー・ワード引数true_fnfalse_fnを受け入れます。したがって、 'tf.Print(x、[y1、y2、...])'は 'x'と評価されますが、' [y1、y2、...] 'の値を出力するという副作用があります。それはあなたの質問に答えるのですか? – myrtlecat

答えて

0

私はあなたが引数の順序を持​​っているかもしれないと思っています。tf.condが混乱しています。コール:

tf.cond(predicate, f, g) 

は、あなたの述語x > yが偽であることから、f2


を評価され、あなたの例では

"そうgを評価し、predicateが真であるならば、fを評価する" と同じです

tf.cond(predicate, true_fn=f, false_fn=g) 

# Or equivalently... 
tf.cond(predicate, false_fn=g, true_fn=f) 
+0

私のtrue_fnまたはfalse_fnは 'tf.Print'を返します。私はテンソルを評価する必要がある' tf.Print'について混乱しますが、私はテンソルを評価しません。あなたは私の質問を誤解するかもしれません。 – gaussclb

+0

おそらく私は持っています。私はあなたの混乱が 'x'ではなく' z'の価値を見ていると思っていましたが、2回目の読書では 'tf.Print'の性質についてもっと分かりました。 – myrtlecat

+0

'tf.Print'は' tf.identity'と同じように動作するので、 'f2'を' def f2():z = tf.Print(z、[z])return z'に書き換えることができます。 'f2'は' z'を実行するのと同じで、 'tf.Print(z、[z])'は 'z'の値を出力します。 – gaussclb

関連する問題