我在conda环境中运行tf2.0,并希望在图形中显示张量。
plt.imshow(tmp)
TypeError: Image data of dtype object cannot be converted to float
tmp.dtype
tf.float32
所以我尝试将其转换为numpy数组,但是...
print(tmp.numpy())
AttributeError: 'Tensor' object has no attribute 'numpy'
tmp.eval()
ValueError: Cannot evaluate tensor using `eval()`: No default session is registered. Use `with sess.as_default()` or pass an explicit session to `eval(session=sess)`
我在其他地方读到这是因为我需要一个活跃的会话或渴望执行。预先执行应该在tf2.0中默认启用,但是...
print(tf.__version__)
2.0.0-alpha0
tf.executing_eagerly()
False
tf.enable_eager_execution()
AttributeError: module 'tensorflow' has no attribute 'enable_eager_execution'
tf.compat.v1.enable_eager_execution()
None
tf.executing_eagerly()
False
sess = tf.Session()
AttributeError: module 'tensorflow' has no attribute 'Session'
我尝试升级到2.0.0b1,但结果完全相同(tf.__version__
除外)。
编辑:
根据this answer,问题可能是因为我试图调试tf.data.Dataset.map()
调用内的函数,该函数可用于静态图形。所以也许问题就变成了“我该如何调试这些功能?”
答案 0 :(得分:0)
对我来说,关键的见解是运行tf.data.Dataset.map()
函数可构建一个图形,该图形稍后作为数据管道的一部分执行。因此,它更多是关于代码生成的,渴望执行不适用。除了缺乏急切的执行力之外,构建图还有其他限制,包括所有输入和输出必须为张量。张量不支持诸如T[0] += 1
之类的项目分配操作。
项目分配是一个相当普遍的用例,因此有一个简单的解决方案:tf.py_function
(以前是tf.py_func
)。 py_function
使用numpy数组作为输入和输出,因此您可以自由使用尚未包含在tensorflow库中的其他numpy函数。
通常,需要权衡取舍:py_function
由python解释器动态解释。因此,它不会像预编译张量操作那样快。更重要的是,the interpreter threads are not aware of each other, so there may be parallelisation issues。
文档https://www.tensorflow.org/beta/guide/data
中有一个对py_function
的有用解释和演示。