1
如果你有一些昂貴的操作的條件,你可能想要懶惰的行爲,即只評估選擇的分支。在Tensorflow中做懶惰條件
下面的作品,是懶惰:
>>> a. tf.zeros(0)
>>> tf.cond(tf.equal(tf.size(a), tf.constant(0)), lambda: tf.constant(-1, dtype=tf.int64), lambda: tf.argmax(a)).eval()
-1
你可以看到,這是懶惰的,因爲argmax沒有評估,因爲它會導致錯誤。因爲argmax取的張量是空的。如果移動argmax了拉姆達的,它產生這種非常錯誤:
>>> am = tf.argmax(a)
>>> tf.cond(tf.equal(tf.size(a), tf.constant(0)), lambda: tf.constant(-1, dtype=tf.int64), lambda: tf.add(am, 1)).eval()
... Reduction axis 0 is empty in shape [0]
哪一個不是由tf.add
操作引起的。移動它內聯,它再次運作:
>>> tf.cond(tf.equal(tf.size(a), tf.constant(0)), lambda: tf.constant(-1, dtype=tf.int64), lambda: tf.add(tf.argmax(a), 1)).eval()
-1
然後,問題是如何做一個更清潔的方式做懶惰條件?