在tensorflow2.0下遇到1.x版本中占位符不兼容问题 tf.placeholder() is not compatible with eager execution的解决方法
最近安装了TensoFlow2.0及以上的版本都发现啊出现这个问题:
RuntimeError: tf.placeholder() is not compatible with eager execution.
问题描述:
这是因为在运行**tf.compat.v1.placeholder(dtype, shape = None, name = None)**的时候急切执行了这条语句,但是我们一般都是在一个Session前先去定义placeholder,但是不会去执行,然后再在Sesion上下文管理器中去传入我们的数据,然后执行。
这里给出一个方法(对我有效)
错误:
import tensorflow as tf
import numpy as np
# tf.compat.v1.disable_eager_execution()
x = tf.compat.v1.placeholder(tf.float32, shape=(1024, 1024))
y = tf.matmul(x, x)
with tf.compat.v1.Session() as sess:
print(sess.run(y))
# rand_array = np.random.rand(1024, 1024)
# print(sess.run(y, feed_dict={x: rand_array}))
在查阅了相关的资料以后,发现是可以在tensorflow2.0版本上运行placeholder的,只是需要一些的改动!
改正后代码
import tensorflow as tf
import numpy as np
tf.compat.v1.disable_eager_execution()
x = tf.compat.v1.placeholder(tf.float32, shape=(1024, 1024))
y = tf.matmul(x, x)
with tf.compat.v1.Session() as sess:
# print(sess.run(y))
rand_array = np.random.rand(1024, 1024)
print(sess.run(y, feed_dict={x: rand_array}))
后面就发现运行成功了,十分的神奇