这是我想要做的简化版本:
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)
答案 0 :(得分:2)
Tensorflow对象不能与常规python对象和函数一起使用。这就是设计张量流的方法。 for
块,while
,tf.while_loop
和其他python内容应替换为tf.cond
,tf.Session
等适当的张量流操作。这些操作使用张量进行操作,它们是主要的张量流对象,不能与python对象一起使用。
从张量中获取python对象的唯一方法是在此对象上调用sess.run()
对象。因此,当您调用Z
时,您将获得python对象(更确切地说, numpy 一个)。显然,tf.Tensor
是result
,它不应与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'}]
这两个都是张量。