EPLE
tensorflow
runtime_error
ai_generated
true
RuntimeError: tf.placeholder() 与急切执行不兼容。请改用 tf.keras.Input()。
RuntimeError: tf.placeholder() is not compatible with eager execution. Use tf.keras.Input() instead.
ID: tensorflow/graph-mode-placeholder-in-eager
90%修复率
90%置信度
1证据数
2023-05-10首次发现
版本兼容性
| 版本 | 状态 | 引入 | 弃用 | 备注 |
|---|---|---|---|---|
| 2.0 | active | — | — | — |
| 2.1 | active | — | — | — |
| 2.2 | active | — | — | — |
| 2.3 | active | — | — | — |
根因分析
TensorFlow 2.x 默认以急切模式运行,但代码使用了 tf.placeholder,这是 TF2 中已移除的图模式 API。
English
TensorFlow 2.x runs in eager mode by default, but the code uses tf.placeholder which is a graph-mode API removed in TF2.
官方文档
https://www.tensorflow.org/guide/eager解决方案
-
Replace all tf.placeholder calls with tf.keras.Input(shape=..., dtype=...) and rebuild the model using the Keras Functional API.
-
If you must use graph mode, wrap the code in a @tf.function decorator and use tf.compat.v1.placeholder inside a tf.compat.v1.Graph() context, but this is not future-proof.
无效尝试
常见但无效的做法:
-
Disable eager execution with tf.compat.v1.disable_eager_execution()
70% 失败
Disabling eager execution may cause other TF2 features to break, and is not recommended for new code.
-
Replace placeholder with tf.Variable
80% 失败
tf.Variable is for model parameters, not for input tensors; it will change the model semantics.