我写了以下代码,
但它不像我期望的那样工作。
我预计'true'
将被打印,而是 'false'
被打印。
你能解释为什么会发生这种情况吗?
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'
最佳答案
tf.equal()
运算符是元素运算符。假设 x
和 y
形状相同(与您的示例中的形状相同)tf.equal(x, y)
将产生一个形状相同的张量,其中每个元素表示是否为x
中的对应元素和 y
是平等的。因此,sess.run(tf.equal(y, y))
在你的程序中将返回数组 [True, True, True]
.
在 Python 中,is
运算符计算两个对象和数组之间的引用相等性 [True, True, True]
与(内置)对象不是同一个对象 True
,所以测试的结果是 False
.
以下程序将通过使用 tf.reduce_all()
实现您期望的行为* tf.equal()
结果的运算符计算单个 bool 值:
y = tf.constant([0, 1, 0])
all_elems_equal = tf.reduce_all(tf.equal(y, y))
with tf.Session() as sess:
b = sess.run(all_elems_equal)
if b:
print 'true'
else:
print 'false'
* 但请注意
tf.equal(x, y)
将broadcast如果它们具有不同的形状,则它的参数,因此您可能会得到意想不到的结果,即使用此程序具有不同形状的两个张量“相等”。例如,在列向量 [[11], [22]]
上使用此测试和行向量 [11, 22]
将表明这些是相等的。如果您还需要比较相等性测试中的形状,则还应该比较 tf.shape(x)
的结果。和 tf.shape(y)
.
关于python-2.7 - TensorFlow tf.equal() 运算符无法按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41875067/