Quelle est la différence entre les tf.cond et if-else?
Quelle est la différence entre les tf.cond et if-else?
Scénario 1
import tensorflow as tf
x = 'x'
y = tf.cond(tf.equal(x, 'x'), lambda: 1, lambda: 0)
with tf.Session() as sess:
print(sess.run(y))
x = 'y'
with tf.Session() as sess:
print(sess.run(y))
Scénario 2
import tensorflow as tf
x = tf.Variable('x')
y = tf.cond(tf.equal(x, 'x'), lambda: 1, lambda: 0)
init = tf.global_variables_initializer()
with tf.Session() as sess:
init.run()
print(sess.run(y))
tf.assign(x, 'y')
with tf.Session() as sess:
init.run()
print(sess.run(y))
Les sorties sont à la fois 1
.
Signifie-t-il seulement tf.espace réservé peut travailler, et non pas tout le tenseur, comme la tf.variable? Quand dois-je choisir si-de la condition else et quand utiliser tf.cond? Quelles sont les diffences entre eux?
Votre erreur dans le code est le suivant:
tf,assign(x, 'y')
il suffit de créer l'opération d'affectation, mais encore vous avez besoin pour exécuter cette opération, de sorte que vous attribue un " y " à x. Donc, vous essayez quelque chose comme ça: ass_op = tf.assign(x, 'y')
Puis sous tf.Session()
, vous devez ajouter: sess.run(ass_op)
Que c'est quand vous allez imprimer 0.OriginalL'auteur gaussclb | 2017-08-05
Vous devez vous connecter pour publier un commentaire.
tf.cond
est évaluée au moment de l'exécution, alors queif-else
est évaluée au graphique du temps de construction.Si vous souhaitez évaluer votre état de santé en fonction de la valeur du tenseur lors de l'exécution,
tf.cond
est la meilleure option.c'est exactement ce que je voulais dire.
Regardez-le de ma mise à jour. Signifie-t-il
x
doivent être tenseur, sinon tf.cond peut pas travailler?Oui x doit être un tenseur; vous pouvez aussi utiliser un espace réservé pour nourrir la valeur
J'essaie d'utiliser tf.variable, mais a échoué. Regarder la mise à jour. Il est incroyable. J'ai entendu quelqu'un utiliser tf.variable,
is_training
de distinguer la formation ou la phase de test, et de changer la condition dedropout
. Mais j'essaie, tf.la variable ne peut pas travailler.OriginalL'auteur Ishant Mrinal
Vouliez-vous dire
if ... else
en Python vstf.cond
?Vous pouvez utiliser
if ... else
pour la création graphique pour différentes conditions extérieures. Par exemple vous pouvez faire un script python pour les graphes avec1, 2, 3
couches cachées, et utiliser les paramètres de ligne de commande pour choisir lequel utiliser.tf.cond
est pour ajouter condition bloc pour le graphique. Par exemple, vous pouvez définir Huber fonction par le code comme ceci:de calcul et de Graphique va par branche différente pour les différentes données d'entrée.
Non, vous ne pouvez pas utiliser
if ... else
pour ajouter une condition de bloquer le graphique.Pas de. Ce n'est pas la même, et ça ne fonctionne pas. Vous devez d'abord créer graphique et lorsque lancer calcul. Mais vous avez essayé de créer graphique et de calculer en même temps.
si j'utilise la variable python à la place de la tf.espace réservé à propos de x, et au moment de l'exécution, je change la valeur de x, sera tf.cond juge condition encore?
Si vous ne voulez pas utiliser de TF, vous pouvez faire la même calcul sans elle et ne l'utilisez que Python.
OriginalL'auteur Vladimir Bystricky
Depuis le graphe de la TensorFlow est statique, vous ne pouvez pas le modifier une fois construit. Ainsi, vous pouvez utiliser des if-else à l'extérieur du graphique à tout moment, par exemple lors de la préparation des lots et etc., mais vous pouvez également l'utiliser lors de la construction du graphique. Qui est, si la condition ne dépend pas de la valeur de n'importe quel tenseur, par exemple la dimention(fixe) du tenseur ou à la forme de tout tenseur. Dans de tels scénarios, le graphique ne sera pas modifiée du fait de la condition, tandis que la excuting le graphique. Le graphique a été résolu après avoir fini de dessiner le graphe et le si-d'autre condition ne serait pas affecter le graphique tout en excuting le graphique.
Mais si la condition dépend de la valeur du tenseur en ce que la condition doit être inclus dans le graphique et donc la tf.cond doit être appliquée.
OriginalL'auteur Lerner Zhang
Il suffit de mettre:
if else
est de savoir comment vous faire basculer dans Python, tandis quetf.cond
est de savoir comment vous faire basculer dans Tensorflow. Pendant la course,if else
est fixée à la compilation des Python programme, tandis quetf.cond
est résolu dans le construit Tensorflow graphique.Vous pouvez penser
tf.cond
comme le Tensorflowinternes façon de faireif else
.OriginalL'auteur