使用tf.disable_v2_behavior()后Tensor无numpy属性报错如何解决?
问题根本原因
- 执行
tf.disable_v2_behavior()后,TensorFlow会切换到1.x的静态图运行模式,默认关闭eager即时执行能力,此时所有张量都是静态计算图的节点,不支持直接调用.numpy()方法提取数值 - 第二个报错的核心原因是
sample_decoder_output[-1]属于计算图构造阶段生成的图张量,未通过会话运行就直接尝试取值,触发了图张量泄露的校验报错
解决方案1(适配当前兼容模式,无需修改全局配置)
保留现有tf.disable_v2_behavior()的兼容配置,使用TensorFlow 1.x的会话机制取值即可,替换原有取值代码:
# 先定义计算节点 predicted_id_op = tf.argmax(sample_decoder_output[-1]) # 用会话运行节点拿到实际数值,如有已初始化的会话可直接复用无需新建 with tf.Session() as sess: predicted_id = sess.run(predicted_id_op)
解决方案2(仅旧代码用v1兼容逻辑,保留全局eager执行)
如果仅部分历史代码需要兼容1.x逻辑,可删除tf.disable_v2_behavior()全局配置,仅对需要运行的1.x静态图逻辑单独用会话执行,其余代码依然可以正常调用张量的.numpy()方法。
内容的提问来源于stack exchange,提问作者I_Al-thamary
相关产品推荐
相关产品推荐

