TensorFlow tf.equal () - operator funktioniert nicht wie erwartet
Schrieb ich den folgenden code
aber es funktioniert nicht wie ich erwarten.
Ich erwartete, dass 'true'
gedruckt werden, sondern 'false'
gedruckt wird.
Können Sie erklären, warum dies geschieht?
import tensorflow as tf
#y_ = tf.constant([0, 1, 0])
y = tf.constant([0, 1, 0])
with tf.Session() as sess:
b = sess.run(tf.equal(y, y))
if b is True:
print 'true'
else:
print 'false'
- Entfernt habe ich den zweiten Teil der post – eine Frage pro post, und es war off-topic sowieso.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den
tf.equal()
- operator ist eine elementweise Betreiber. Vorausgesetztx
undy
sind die gleiche Form (wie in deinem Beispiel)tf.equal(x, y)
wird ein tensor mit der gleichen Form, wo jedes element gibt an, ob die entsprechenden Elemente inx
undy
gleich sind. Dahersess.run(tf.equal(y, y))
in Ihrem Programm Rückkehr das array[True, True, True]
.In Python, die
is
- operator berechnet Referenz-Gleichheit zwischen zwei Objekten, und das array[True, True, True]
ist nicht das gleiche Objekt wie die (built-in) - ObjektTrue
, so das Ergebnis des Tests istFalse
.Dem folgenden Programm erreichen würde das Verhalten, das Sie erwarten,* mit den
tf.reduce_all()
- operator auf das Ergebnistf.equal()
zur Berechnung einer einzelnen boolean-Wert:* Beachten Sie jedoch, dass
tf.equal(x, y)
wird broadcast Ihre Argumente, wenn Sie verschiedene Formen haben, so könnte man das unerwartete Ergebnis, dass zwei Tensoren mit unterschiedlichen Formen sind "gleich" mit diesem Programm haben. Zum Beispiel mit diesem test auf die Spalte vector[[11], [22]]
und den zeilenvektor[11, 22]
würde darauf hinweisen, dass diese gleich sind. Wenn Sie müssen auch vergleichen Sie die Formen in Ihre Gleichheit zu testen, sollten Sie auch vergleichen Sie das Ergebnistf.shape(x)
undtf.shape(y)
.