Tensorflow python. ValueError: Non-scalar tensor cannot be converted to boolean
Tensorflow python. ValueError: Non-scalar tensor cannot be converted to boolean
我一直在尝试这些与 tensorflow 1.12.2 和 visual studio 15.9.6 安装相关的代码。 python 版本是 3.6.6.
问题出在log_huber函数中的条件语句。非常感谢任何有关如何解决此问题的建议。代码附在下面:
import tensorflow as tf
import numpy as np
def log_huber(x, m):
if tf.abs(x) <= tf.abs(m):
return x**2
else:
return m**2 * (1 - 2 * tf.log(m) + tf.log(x**2))
x = np.arange(10,dtype=np.float32)
m = np.arange(10,20,dtype=np.float32)
_x = tf.data.Dataset.from_tensor_slices(x).shuffle(10).repeat().batch(1)
iter_x = _x.make_one_shot_iterator()
_x_init_ops = iter_x.make_initializer(_x)
next_x = iter_x.get_next()
_m = tf.data.Dataset.from_tensor_slices(m).shuffle(10).repeat().batch(1)
iter_m = _m.make_one_shot_iterator()
_m_init_ops = iter_m.make_initializer(_x)
next_m = iter_m.get_next()
y = tf.contrib.eager.py_func(func=log_huber, inp=[next_x,next_m], Tout=tf.float32)
with tf.Session() as sess:
sess.run([_x_init_ops,_m_init_ops])
terminate = 1
while terminate!="0":
print(sess.run(y))
terminate = input("0 for end, 1 to continue")
报错信息如下:
...\testTensorboard\testTensorboard\dataset.py", line 5, in log_huber
if tf.abs(x) <= tf.abs(m):
...\conda\conda\envs\rdkit-env\lib\site-packages\tensorflow\python\framework\ops.py", line 914, in __bool__
"Non-scalar tensor %s cannot be converted to boolean." % repr(self))
ValueError: Non-scalar tensor <tf.Tensor: id=58, shape=(1,), dtype=bool, numpy=array([False])> cannot be converted to boolean.
如果您这样使用 tf.squeeze,您的尺寸将被删除。
def log_huber(x, m):
print (tf.abs(x))
if tf.squeeze(tf.abs(x)) <= tf.squeeze(tf.abs(m)):
return x**2
else:
return m**2 * (1 - 2 * tf.log(m) + tf.log(x**2))
它从这个张量的形状中删除大小为 1 的维度
tf.Tensor([2.], shape=(1,), dtype=float32)
我一直在尝试这些与 tensorflow 1.12.2 和 visual studio 15.9.6 安装相关的代码。 python 版本是 3.6.6.
问题出在log_huber函数中的条件语句。非常感谢任何有关如何解决此问题的建议。代码附在下面:
import tensorflow as tf
import numpy as np
def log_huber(x, m):
if tf.abs(x) <= tf.abs(m):
return x**2
else:
return m**2 * (1 - 2 * tf.log(m) + tf.log(x**2))
x = np.arange(10,dtype=np.float32)
m = np.arange(10,20,dtype=np.float32)
_x = tf.data.Dataset.from_tensor_slices(x).shuffle(10).repeat().batch(1)
iter_x = _x.make_one_shot_iterator()
_x_init_ops = iter_x.make_initializer(_x)
next_x = iter_x.get_next()
_m = tf.data.Dataset.from_tensor_slices(m).shuffle(10).repeat().batch(1)
iter_m = _m.make_one_shot_iterator()
_m_init_ops = iter_m.make_initializer(_x)
next_m = iter_m.get_next()
y = tf.contrib.eager.py_func(func=log_huber, inp=[next_x,next_m], Tout=tf.float32)
with tf.Session() as sess:
sess.run([_x_init_ops,_m_init_ops])
terminate = 1
while terminate!="0":
print(sess.run(y))
terminate = input("0 for end, 1 to continue")
报错信息如下:
...\testTensorboard\testTensorboard\dataset.py", line 5, in log_huber
if tf.abs(x) <= tf.abs(m):
...\conda\conda\envs\rdkit-env\lib\site-packages\tensorflow\python\framework\ops.py", line 914, in __bool__
"Non-scalar tensor %s cannot be converted to boolean." % repr(self))
ValueError: Non-scalar tensor <tf.Tensor: id=58, shape=(1,), dtype=bool, numpy=array([False])> cannot be converted to boolean.
如果您这样使用 tf.squeeze,您的尺寸将被删除。
def log_huber(x, m):
print (tf.abs(x))
if tf.squeeze(tf.abs(x)) <= tf.squeeze(tf.abs(m)):
return x**2
else:
return m**2 * (1 - 2 * tf.log(m) + tf.log(x**2))
它从这个张量的形状中删除大小为 1 的维度
tf.Tensor([2.], shape=(1,), dtype=float32)