TensorFlow 2 禁用Eager Execution后如何运行模型获取计算结果?
禁用Eager模式下的TensorFlow 2图执行方法
核心执行逻辑
调用disable_eager_execution()关闭Eager模式后,TensorFlow 2会切换回静态图运行机制,和TensorFlow 1的执行逻辑保持一致。TensorFlow 2原生提供的会话API可以直接触发静态图计算,无需额外安装第三方补丁。
完整执行链路分为三步:
- 先完成所有计算图的节点定义(即代码中定义的常量、运算关系节点)
- 初始化官方提供的会话实例
- 触发图计算逻辑,传入需要取值的张量节点,拿到实际计算结果
完整可运行代码
import tensorflow as tf from tensorflow.python.framework.ops import disable_eager_execution # 关闭Eager Execution disable_eager_execution() # 构建静态计算图的节点 a = tf.constant(1) b = tf.constant(2) c = a + b # 执行图计算流程 with tf.compat.v1.Session() as sess: # 通过run方法指定需要计算的张量c calc_result = sess.run(c) print("c的计算结果:", calc_result)
实操注意事项
- 上述代码运行后会输出结果
c的计算结果: 3,和TensorFlow 1的执行效果完全一致 - 在会话上下文内部,也可以直接调用张量的
eval()方法完成取值,效果和sess.run(c)完全等价:with tf.compat.v1.Session() as sess: print(c.eval()) - 不要在完成图定义后直接打印张量c:静态图模式下所有张量都只是图的结构描述,没有绑定实际运算结果,直接执行
print(c)只会输出张量的shape、数据类型等元信息,无法拿到真实数值 - 不需要额外执行
tf.compat.v1.disable_v2_behavior()做全局API替换:只要提前调用了disable_eager_execution(),直接实例化tf.compat.v1.Session就能正常完成计算,不会触发版本兼容报错
内容的提问来源于stack exchange,提问作者Do Po
相关产品推荐
相关产品推荐

