プレースホルダーを使用して関数の実行を制御したいが、 "tf.ToolsorをPython boolとして使用することはできない"というエラーが発生する。ここでは、このエラーを生成したコードは次のとおりです。tensorflow:スカラーブールテンソルがTrueであるかどうかを調べる
import tensorflow as tf
def foo(c):
if c:
print('This is true')
#heavy code here
return 10
else:
print('This is false')
#different code here
return 0
a = tf.placeholder(tf.bool) #placeholder for a single boolean value
b = foo(a)
sess = tf.InteractiveSession()
res = sess.run(b, feed_dict = {a: True})
sess.close()
私は運なしif c is not None
にif c
を変更しました。プレースホルダa
をオンまたはオフにして、foo
を制御するにはどうすればよいですか?
更新:@nessunoと@nemoが指摘するとおり、if..else
の代わりにtf.cond
を使用する必要があります。私の質問への答えは、このような再設計し、私の機能にある:
import tensorflow as tf
def foo(c):
return tf.cond(c, func1, func2)
a = tf.placeholder(tf.bool) #placeholder for a single boolean value
b = foo(a)
sess = tf.InteractiveSession()
res = sess.run(b, feed_dict = {a: True})
sess.close()
'foo'機能は実際には非常に複雑です。私はちょうどその機能のいくつかの操作を 'a'をオン/オフすることによって変更したいと思います。 'foo'関数をどのように保つことができますか?私は問題が '{a:True} 'か' c: 'のどちらかであると考えます。 –
条件が評価されたときに実行する2つの異なる関数を定義するだけで済みます。唯一の制限は、両方とも同じ数と型の値を返さなければならないことです。したがって、ラムダの代わりに、独自の関数を定義して使用することができます – nessuno