Lloyd Rayner
Lloyd Rayner

Reputation: 1049

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()?

Upvotes: 84

Views: 130449

Answers (4)

user2117745
user2117745

Reputation: 1131

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.

Upvotes: 112

Synthesis
Synthesis

Reputation: 554

In TensorFlow 2.3+, you can disable eager mode anytime using the following method:

import tensorflow as tf

tf.config.run_functions_eagerly(False)

Upvotes: 22

Jude TCHAYE
Jude TCHAYE

Reputation: 464

You can disable TensorFlow v2 behavior like this:

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

Upvotes: 12

mibu
mibu

Reputation: 1557

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.

Upvotes: 29

Related Questions