You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TensorFlow 1.x中Keras加载自定义模型报错:numpy()仅在eager执行启用时可用

问题

我运行某GitHub仓库中的代码(第186行通过model = keras.models.load_model(file_path)加载机器学习模型),克隆仓库后添加了两行代码以兼容TensorFlow 1.x:

import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()

此时加载官方提供的模型文件Adiac1.hdf5可正常运行,但加载我自行训练保存的Adiac2.hdf5时,该行代码抛出错误:

NotImplementedError: numpy() is only available when eager execution is enabled.

想了解两个模型加载存在差异的原因,以及为何部分模型加载需要启用eager执行模式,而部分不需要?

原因分析
  • 训练保存的环境版本差异:官方的Adiac1.hdf5是基于TensorFlow 1.x的静态图模式训练并保存的,和你启用的tf.disable_v2_behavior()环境完全匹配,加载时不需要依赖eager执行。而你自己训练的Adiac2.hdf5,应该是在TensorFlow 2.x环境下完成的——TF2默认开启eager执行,保存模型时会写入依赖eager模式的操作或张量属性,比如某些层的计算逻辑用到了numpy()方法,这类内容在禁用eager的TF1.x兼容环境里无法被解析,直接触发报错。
  • 模型保存的细节配置不同:就算是相同的模型架构,保存时的配置也可能有差异。比如你训练Adiac2时,可能使用了TF2特有的层、自定义操作,或者保存时包含了eager模式下的动态计算图信息;而官方模型是纯TF1.x的静态图结构,不存在这些eager相关的依赖项。
  • 模型加载逻辑的兼容性限制:keras.models.load_model()在不同TensorFlow环境下的解析逻辑不一样。禁用eager后,加载器会以TF1.x的静态图方式解析模型文件,一旦遇到TF2保存的、依赖eager的张量或操作,就会触发numpy()相关错误——因为静态图模式下的张量并没有numpy()方法,只有eager模式下的张量才支持这个方法调用。

内容的提问来源于stack exchange,提问作者mahmoud aghvami

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 01:25:08