tensorflow - 如何添加if语句?

时间:2017-10-02 09:19:09

标签: python tensorflow

这是我想要做的简化版本:

result = sess.run(cost, feed_dict={X: np.matrix(np.array(values[0][1]))})

if result > Z:
    print('A')
else:
    print('B')

然而,当我试图运行时,我得到了:

if result > Z:
  File "/home/John/tensorflow/local/lib/python2.7/site-packages/tensorflow/python/framework/ops.py", line 578, in __nonzero__
    raise TypeError("Using a `tf.Tensor` as a Python `bool` is not allowed. "
TypeError: Using a `tf.Tensor` as a Python `bool` is not allowed. Use `if t is not None:` instead of `if t:` to test if a tensor is defined, and use TensorFlow ops such as tf.cond to execute subgraphs conditioned on the value of a tensor.

如何解决这个问题?

修改

def getCertitude1(result):
    return (Z/result)*100

def getCertitude2(result):
    return (result/Z)*100

result = sess.run(cost, feed_dict={X: np.matrix(np.array(reps[0][1]))})

if result is not None:
    a = tf.cond(tf.less(result, Z), lambda: getCertitude1(result), lambda: getCertitude2(result))     
    print("a: " + str(a))                   

结果为a: : Tensor("cond/Merge:0", shape=(?, 128), dtype=float32)

1 个答案:

答案 0 :(得分:2)

Tensorflow对象不能与常规python对象和函数一起使用。这就是设计张量流的方法。 for块,whiletf.while_loop和其他python内容应替换为tf.condtf.Session等适当的张量流操作。这些操作使用张量进行操作,它们是主要的张量流对象,不能与python对象一起使用。

从张量中获取python对象的唯一方法是在此对象上调用sess.run()对象。因此,当您调用Z时,您将获得python对象(更确切地说, numpy 一个)。显然,tf.Tensorresult,它不应与python对象Z混合。

您可以使用另一个sess.run()评估tf.cond,然后切换到常规python操作,或者正确使用cost并根据Z的值创建一个子图[{'name' : 'user1','date' : '23/09/2017','deviceType' : 'Android'}, {'name' : 'user1','date' : '23/09/2017','deviceType' :'ios'}, {'name' : 'user1','date' : '23/09/2017','deviceType' : 'Android'}, {'name' : 'user2','date': '23/09/2017','deviceType':'ios'}] 这两个都是张量。