tensorflow: vérifier si un scalaire booléen tenseur est Vrai
Je veux contrôler l'exécution d'une fonction à l'aide d'un espace réservé, mais reçois un message d'erreur "à l'Aide d'un tf.Tenseur comme un Python bool n'est pas autorisé". Voici le code qui génère cette erreur:
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()
J'ai changé if c
à if c is not None
sans chance. Comment puis-je contrôler foo
en tournant sur et hors de l'espace réservé a
alors?
Mise à jour: comme @nessuno et @nemo point, nous devons utiliser tf.cond
au lieu de if..else
. La réponse à ma question est de re-conception de ma fonction comme ceci:
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()
Vous devez vous connecter pour publier un commentaire.
Vous devez utiliser
tf.cond
de définir une condition de fonctionnement à l'intérieur du graphique et le changement, ainsi, le débit de la tenseurs.foo
fonction est très compliqué dans la pratique. Je veux juste changer certaines opérations dans cette fonction en tournanta
on/off. Comment puis-je garder lefoo
fonction? Je soupçonne que le problème est de soit{a: True}
ouif c:
L'exécution réelle n'est pas fait en Python, mais dans le TensorFlow backend qui vous offre avec le calcul graphique, il est censé exécuter. Cela signifie que chaque état et le contrôle de flux que vous souhaitez appliquer doit être formulé comme un nœud dans le graphe.
Pour
if
conditions, il est ledir
opération:Un moyen plus simple de régler ce problème: