在Tensorflow中将Logical AND的输出与两个二进制张量混淆

时间:2018-02-12 17:40:27

标签: tensorflow logical-operators tensor

我在tensorflow中有两个二进制张量。我想将它们转换为布尔张量(逐元素)并基本上得到一个“交集”,一个逻辑AND。但是在转换为boolean以及logical_and部分时似乎出现了问题。我做错了什么?

sess = tf.InteractiveSession()
x = tf.random_uniform([1, 10], dtype=tf.int32, maxval=2))
y = tf.random_uniform([1, 10], dtype=tf.int32, maxval=2))
print(x.eval())
print(y.eval())
x = tf.cast(x, tf.bool)
y = tf.cast(y, tf.bool)
print(x.eval())
print(y.eval())
intersect = tf.logical_and(x, y)
print(intersect.eval())

这会产生以下ouptut:

[[0 0 1 1 0 1 0 0 1 1]]
[[0 1 0 0 1 0 1 0 0 1]]
[[False  True  True  True  True False False  True  True  True]]
[[False  True  True  True  True  True  True False  True  True]]
[[False False  True  True False False False False False  True]]

1 个答案:

答案 0 :(得分:3)

每次评估tf.random_normal时,

intersect都会生成一个新的随机张量。

试试这个:

sess = tf.Session()
x = tf.random_uniform([1, 10], dtype=tf.int32, maxval=2)
sess.run([x, tf.cast(x, tf.bool)])

输出:

[array([[0, 1, 0, 0, 0, 0, 0, 0, 1, 1]], dtype=int32), 
 array([[False,  True, False, False, False, False, False, False,  True,
     True]])]

因此,如果您同时运行两个操作,您将获得相同的输出。 考虑将xy存储为tf.constant