python-2.7 - TensorFlow tf.equal() 运算符无法按预期工作

标签 python-2.7 tensorflow

我写了以下代码,
但它不像我期望的那样工作。
我预计'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() 运算符是元素运算符。假设 xy形状相同(与您的示例中的形状相同)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/

相关文章:

tensorflow - 如何安装tensorflow==2.3.0

python - tf.nn.sigmoid_cross_entropy_with_logits 公司关于文档中的参数

android - Tensorflow 中的 'Const Op' 是什么?

python - 如何拒绝Python中的随机数?

python - linux 可执行文件不工作但脚本在 python 中工作

python - 如何根据传递给函数的数据类型调度 Python 2 函数?

Python:如何获取 GPU 数量

python - argparse 参数模式

python-2.7 - 你能在 python 2 中为 zip() 函数动态创建参数吗?

python - Tensorflow 编译运行时间长