How do I disable TensorFlow's eager execution?

I am trying to learn TensorFlow. Currently, I am working with placeholders. When I tried to create the placeholder, I got an error: RuntimeError: tf.placeholder() is not compatible with eager execution, which makes sense as placeholders are not executable immediately.

So, how do I turn eager execution off?

I have never turned eager execution on in the first place, so I am not sure how it happened. Is there an opposite to tf.disable_eager_execution()?


Solution 1:

Assume you are using Tensorflow 2.0 preview release which has eager execution enabled by default. There is a disable_eager_execution() in v1 API, which you can put in the front of your code like:

import tensorflow as tf

tf.compat.v1.disable_eager_execution()

On the other hand, if you are not using 2.0 preview, please check if you accidentally enabled eager execution somewhere.

Solution 2:

I assume the you are using TensorFlow 2.0. In TF2, eager mode is turned on by default. However, there is a disable_eager_execution() in TensorFlow 2.0.0-alpha0 but it is hidden quite deep and cannot be directly accessed from top-level module namespace (i.e tf namespace).

You can call the function like so:

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__) 

>>>Disables eager execution. This function can only be called before any Graphs, Ops, or Tensors have been created. It can be used at the beginning of the program for complex migration projects from TensorFlow 1.x to 2.x.