如何不使用Session打印TensorFlow对象并解决numpy属性报错
解决方案
1. 修复版本兼容冲突
TensorFlow 2.6官方适配的numpy版本范围为1.19.2~1.19.4,你当前使用的numpy 1.19.5存在API兼容问题,是触发Tensor对象无numpy属性报错的核心原因。
执行如下命令降级numpy版本:
pip install numpy==1.19.4 --force-reinstall
安装完成后重启运行环境(若使用Jupyter则重启内核),再次测试arr.numpy()即可正常输出结果。
2. 执行模式冲突修复
如果版本降级后问题仍存在,说明你代码中存在TF1.x图模式和TF2.x eager执行模式的混用问题,按如下规则调整:
- 不要在
tf.function装饰的函数内部调用numpy()方法,所有Tensor转numpy的操作需移到函数外部,函数内部直接用tf.print输出Tensor本身即可。 - 检查代码中是否存在
tf.compat.v1.disable_eager_execution()、显式创建v1默认图的逻辑,删除相关代码后添加如下配置强制走eager执行:
tf.compat.v1.enable_eager_execution() tf.compat.v1.disable_v1_behavior()
3. 动态学习率打印方法
ExponentialDecay是学习率调度类,不是Tensor对象,不能直接调用eval()方法,按如下方式打印当前学习率:
# 直接调用调度类的call方法传入当前迭代步数即可获取当前学习率Tensor current_lr = model.optimizer.learning_rate(model.optimizer.iterations) # eager模式下直接转numpy打印 print(current_lr.numpy()) # 也可以直接用tf.print输出无需类型转换 tf.print(current_lr)
注意事项
不要主动调用tf.compat.v1.Session类的图模式接口,TF2.x默认eager执行模式下无需创建会话即可直接获取Tensor值,两种模式混用会引发更多兼容问题。
内容的提问来源于stack exchange,提问作者whitepanda
相关产品推荐
相关产品推荐

