imshow() numpy() 的困难和 tf2.0 中的急切执行
difficulty with imshow() numpy() and eager execution in tf2.0
我是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 中应该默认启用 Eager execution,但是...
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__
除外)。
编辑:
根据 ,问题可能是因为我正在尝试调试 tf.data.Dataset.map()
调用中的一个函数,该函数使用静态图。所以也许问题变成了"how do I debug these functions?"
对我来说重要的见解是 运行 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.
文档中有对 py_function
的有用解释和演示:https://www.tensorflow.org/beta/guide/data
我是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 中应该默认启用 Eager execution,但是...
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__
除外)。
编辑:
根据 tf.data.Dataset.map()
调用中的一个函数,该函数使用静态图。所以也许问题变成了"how do I debug these functions?"
对我来说重要的见解是 运行 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.
文档中有对 py_function
的有用解释和演示:https://www.tensorflow.org/beta/guide/data