RuntimeError: tf.placeholder() is not compatible with eager execution

I found an easy solution here: disable Tensorflow eager execution

Basicaly it is:


With this, you disable the default activate eager execution and you don't need to touch the code much more.

In TensorFlow 1.X, placeholders are created and meant to be fed with actual values when a tf.Session is instantiated. However, from TensorFlow2.0 onwards, Eager Execution has been enabled by default, so the notion of a "placeholder" does not make sense as operations are computed immediately (rather than being differed with the old paradigm).

Also see Functions, not Sessions,

# TensorFlow 1.X
outputs =, feed_dict={placeholder: input})
# TensorFlow 2.0
outputs = f(input)

tf.placeholder() is meant to be fed to the session that when run recieve the values from feed dict and perform the required operation. Generally you would create a Session() with 'with' keyword and run it.But this might not favour all situations due to which you would require immediate execution.This is called eager execution. Example:

generally this is the procedure to run a Session:

import tensorflow as tf

def square(num):
    return tf.square(num) 

p = tf.placeholder(tf.float32)
q = square(num)

with tf.Session() as sess:
    print(, feed_dict={num: 10})

But when we run with eager execution we run it as:

import tensorflow as tf


def square(num):
   return tf.square(num)


Therefore we need not run it inside a session explicitely and can be more intuitive in most of the cases.This provides more of a interactive execution. For further details visit:

If you are converting the code from tensorflow v1 to tensorflow v2, You must implement tf.compat.v1 and Placeholder is present at tf.compat.v1.placeholder but this can only be executed in eager mode off.


TensorFlow released the eager execution mode, for which each node is immediately executed after definition. Statements using tf.placeholder are thus no longer valid.