This is a simplified version of what I am trying to do:
result = sess.run(cost, feed_dict={X: np.matrix(np.array(values[0][1]))})
if result > Z:
print('A')
else:
print('B')
Yet when trying to run this I get:
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.
How to fix this?
EDIT:
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))
results in a: : Tensor("cond/Merge:0", shape=(?, 128), dtype=float32)
Advertisement
Answer
tensorflow objects can’t be used with regular python objects and functions. That’s how tensorflow is designed. if/else
blocks, for
, while
and other python stuff should be replaced with appropriate tensorflow operations like tf.while_loop
, tf.cond
and so on. These operations operate with tensors which are the main tensorflow objects, and could not be used with python objects.
The only way to get a python object from tensor is to call tf.Session
object on this object. Thus, when you are calling sess.run()
you get python object (more precisely, numpy one). Apparently, Z
is a tf.Tensor
, and it shouldn’t be mixed with python object result
.
You could either evaluate Z
with another sess.run()
and then switch to regular python operations, or properly use tf.cond
and create a subgraph based on the values of cost
and Z
which are both tensors.