我写了下面的代码,但它不像我期望的那样工作.我预计'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'
mrry.. 12
该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()
来计算单个布尔值:
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)
它将广播其参数,因此您可能会得到意外的结果,即使用此程序,两个具有不同形状的张量"相等".例如,对列向量[[11], [22]]
和行向量使用此测试[11, 22]
将指示这些是相等的.如果您还需要形状在平等的测试比较,你也应该比较的结果tf.shape(x)
和tf.shape(y)
.
该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()
来计算单个布尔值:
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)
它将广播其参数,因此您可能会得到意外的结果,即使用此程序,两个具有不同形状的张量"相等".例如,对列向量[[11], [22]]
和行向量使用此测试[11, 22]
将指示这些是相等的.如果您还需要形状在平等的测试比较,你也应该比较的结果tf.shape(x)
和tf.shape(y)
.