当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《TensorFlowtf.equal()运算符无法按预期工作》经验,为你挑选了1个好方法。

我写了下面的代码,但它不像我期望的那样工作.我预计'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()操作是按元素操作.假设xy具有相同的形状(因为它们是在你的例子)tf.equal(x, y)将产生具有相同的形状,其中每个元素指示在相应的元件是否张量xy是相等的.因此,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).



1> mrry..:

tf.equal()操作是按元素操作.假设xy具有相同的形状(因为它们是在你的例子)tf.equal(x, y)将产生具有相同的形状,其中每个元素指示在相应的元件是否张量xy是相等的.因此,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).

推荐阅读
贴进你的心聆听你的世界
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有