Tensorflow 在“预测”步骤上的Keras模型中禁用了急切执行`

Tensorflow 在“预测”步骤上的Keras模型中禁用了急切执行`,tensorflow,machine-learning,keras,tensorflow2.0,tf.keras,Tensorflow,Machine Learning,Keras,Tensorflow2.0,Tf.keras,为什么tensorflow在tf.keras.Model的predict\u step函数中禁用了急切执行?也许我弄错了什么,但这里有一个例子: from __future__ import annotations from functools import wraps import tensorflow as tf def print_execution(func): @wraps(func) def wrapper(self: SimpleModel, data):

为什么tensorflow在
tf.keras.Model
predict\u step
函数中禁用了急切执行?也许我弄错了什么,但这里有一个例子:

from __future__ import annotations
from functools import wraps
import tensorflow as tf

def print_execution(func):
    @wraps(func)
    def wrapper(self: SimpleModel, data):
        print(tf.executing_eagerly())  # Prints False
        return func(self, data)
    return wrapper

class SimpleModel(tf.keras.Model):
    def __init__(self):
        super().__init__()

    def call(self, inputs, training=None, mask=None):
        return inputs

    @print_execution
    def predict_step(self, data):
        return super().predict_step(data)

if __name__ == "__main__":
    x = tf.random.uniform((2, 2))
    print(tf.executing_eagerly())  # Prints True
    model = SimpleModel()
    pred = model.predict(x)

这是故意的行为吗?有没有办法强制
predict\u步骤
在紧急模式下运行?

如果要在紧急模式下运行
predict\u步骤
功能,可以按如下操作。请注意,它会将所有内容设置为渴望模式

import tensorflow as tf
tf.config.run_functions_eagerly(True)
通常
tf。函数
处于
图形
模式。使用上述语句,它们也可以设置为
Eager
模式

根据您的评论,好吧,如果您在编译模型时设置
run\u
,应该不会有任何区别。以下是官方声明

急切地跑:Bool。默认为False。如果为真,该模型的逻辑将不会被包装在tf中。功能。建议将其保留为“无”,除非您的模型无法在tf内运行。功能


关于第一个查询,为什么
TensorFlow
tf.keras.Model
predict\u step
函数中禁用了急切执行


其中一个主要原因是提供模型的最佳性能。它不仅具有
预测步骤
,而且还具有
训练步骤
测试步骤
。基本上
tf。KERA
模型被编译成静态图。为了使它们在急切模式下运行,需要执行上述方法。但请注意,在这种情况下使用“渴望”模式可能会降低您的训练速度。为了美好的集体,
tf。KERA
模型以图形模式编译。

您还可以在编译时设置
run\u急切地=True
,这也将产生预期的结果

model = SimpleModel()
model.compile(run_eagerly = True)
pred = model.predict(x)
结果:

True
True

似乎我也可以在模型内设置
self.run\u急切地=True
,你知道两者之间是否有区别吗?更新了这方面的答案。