tf.reduce_max在比较上不一致

时间:2018-05-17 14:06:07

标签: python if-statement tensorflow graph tensor

给定列表/张量项目,我想检查整个列表的最大项目是否与列表特定部分中的最大项目相同:

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

在上面的示例中,cd应该相同,但是,当您运行模型时,它不满足重新生成变量c的条件一个向量。这只是一个例子,表明这些类型的比较似乎是错误的。知道什么是正确的方法吗?

1 个答案:

答案 0 :(得分:2)

  

在上面的例子中,c和d应该是相同的

没有。你在这应该小心。 {em}计算图中的PersonnelNumberc是不同的操作。将它们与d进行比较是没有意义的,它们总是不同的对象。你真正需要的是tf.equal来确定张量值是否与元素相同,tf.cond来组织计算图中的==语句。它看起来像这样:

if

另外,请注意,指向op(在本例中为result = tf.cond(tf.equal(c, d), lambda: tf.ones((1, 100)), lambda: tf.zeros((1, 100))) 的python变量的重新分配不会更改图中的op。