TensorFlow1.x转2.x升级报错:'Dense'无'_saved_model_inputs_spec'属性
TensorFlow 1.x转2.x后
_saved_model_inputs_spec属性错误排查方向 - 检查TFsnippet升级完整性:
tf_upgrade_v2工具无法完全覆盖第三方库(如TFsnippet)的TF1代码,需手动排查TFsnippet中涉及Keras层(尤其是Dense)的保存/加载逻辑,若存在直接访问_saved_model_inputs_spec这类TF1私有属性的代码,替换为TF2公开API(比如Model.input_spec或get_input_spec())。 - 验证Keras层兼容性:确认代码中使用的Dense层是TF2原生的
tf.keras.layers.Dense,而非TF1遗留的tf.compat.v1.keras.layers.Dense或自定义修改过的Dense类。部分老代码自定义继承Dense的层时,可能遗漏TF2所需的属性或方法。 - 排查模型保存/加载流程:错误出现在predictor调用阶段,大概率和模型加载相关。确认是否用TF2的
tf.keras.models.load_model替代了TF1的tf.compat.v1.saved_model.load,加载时是否正确指定custom_objects参数,确保自定义层或第三方层能被正确解析。 - 核对TensorFlow版本兼容性:当前使用的TF2版本建议选2.8+(适配Python3.8),部分旧版TF2对TF1遗留属性的兼容处理不完善,可尝试升级到稳定版TF2。
- 搜索代码中对私有属性的直接访问:遍历整个代码库(包括donut、TFsnippet),查找是否有直接访问
_saved_model_inputs_spec的代码段,这类私有属性在TF2中已被移除或改名,需替换为对应公开接口。 - 拆分测试模型核心流程:即使无法编写最小复现示例,可从donut的predictor中提取模型加载的核心代码,单独测试加载模型后调用predict是否报错,逐步缩小问题范围到具体模型部分或加载逻辑。
内容的提问来源于stack exchange,提问作者Miguel
相关产品推荐
相关产品推荐

