如何禁用 TensorFlow 的急切执行?

我在学张力流。目前,我正在使用占位符。当我试图创建占位符时,我得到了一个错误: RuntimeError: tf.placeholder() is not compatible with eager execution,这是有意义的,因为占位符不能立即执行。

那么,我怎样才能停止迫切的执行呢?

我一开始就没有急切地执行过死刑,所以我不知道这是怎么发生的。有没有 tf.disable_eager_execution()的对立面?

110338 次浏览

假设您使用的是 Tensorflow 2.0预览版,默认情况下启用了即时执行。在 v1 API 中有一个 disable_eager_execution(),您可以将它放在代码的前面,比如:

import tensorflow as tf
    

tf.compat.v1.disable_eager_execution()

另一方面,如果您没有使用 2.0预览版,请检查您是否在某个地方意外地启用了渴望执行。

我假设你正在使用 TensorFlow 2.0。在 TF2中,默认情况下将打开急切模式。然而,TensorFlow 2.0.0-alpha0中有一个 disable_eager_execution(),但是它隐藏得很深,不能从顶级模块名称空间(即 tf 名称空间)直接访问。

你可以这样调用函数:

import tensorflow as tf
from tensorflow.python.framework.ops import disable_eager_execution


disable_eager_execution()


a = tf.constant(1)
b = tf.constant(2)
c = a + b
print(c)

>>>Tensor("add:0", shape=(), dtype=int32)

print(disable_eager_execution.__doc__)

> > 禁用急切执行。 此函数只能在创建任何图形、运算符或张量之前调用。它可以在程序开始时用于从 TensorFlow 1.x 到2.x 的复杂迁移项目。

您可以像下面这样禁用 TensorFlow v2行为:

import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()

在 TensorFlow 2.3 + 中,您可以使用以下方法随时禁用即时模式:

import tensorflow as tf


tf.config.run_functions_eagerly(False)