tf.reduce_max не согласуется при сравнении - PullRequest
0 голосов
/ 17 мая 2018

Учитывая список / тензор элементов, я хочу проверить, совпадает ли максимальный элемент всего списка с максимальным элементом в определенной части списка:

import tensorflow as tf
a = tf.get_variable('a', (10,100))
b = tf.unstack(a,axis=1)
c = tf.reduce_max(b[0])
d = tf.reduce_max(b[0])
if c == d:
  c = tf.ones((1,100))

sess = tf.Session()
sess.run(tf.global_variables_initializer())
sess.run([c,d])

В приведенном выше примереc и d должны быть одинаковыми, однако, когда вы запускаете модель, она не удовлетворяет условию повторного создания переменной c как одного вектора.Это всего лишь пример, показывающий, что эти типы сравнения кажутся неправильными.Есть идеи, как правильно это сделать?

1 Ответ

0 голосов
/ 17 мая 2018

в приведенном выше примере c и d должны быть одинаковыми

Нет. Вы должны быть осторожны здесь. c и d - это разные операции в вычислительном графе . Сравнивать их с == бессмысленно, они всегда разные объекты. Что вы действительно ищете, так это tf.equal, чтобы определить, являются ли значения тензора одинаковыми для каждого элемента, и tf.cond, чтобы организовать оператор if в вычислительном графе. , Это будет выглядеть примерно так:

result = tf.cond(tf.equal(c, d), lambda: tf.ones((1, 100)), lambda: tf.zeros((1, 100)))

Также обратите внимание, что переназначение переменной python, которая указывает на оператор (c в данном случае) , не не изменяет оператор на графике.

...