Запутанный вывод логического И с двумя бинарными тензорами в Tensorflow

У меня есть два бинарных тензора в тензорном потоке. Я хочу преобразовать их оба в логические тензоры (по элементам) и в основном получить «пересечение», логическое И. Однако, похоже, что-то пошло не так при преобразовании в логическое значение, а также в части 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())

Это дает следующий результат:

[[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]]

person Chris    schedule 12.02.2018    source источник


Ответы (1)


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]])]

Поэтому, если вы запустите обе операции одновременно, вы получите одинаковый результат. Рассмотрите возможность хранения x и y как tf.constant

person squadrick    schedule 12.02.2018