Tensorflow 在“预测”步骤上的Keras模型中禁用了急切执行`
为什么tensorflow在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):
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
,你知道两者之间是否有区别吗?更新了这方面的答案。