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

TensorFlow 2.8保存模型报错:UnboundLocalError(logging_verbosity未赋值)

解决TF2兼容TF1模型保存时的UnboundLocalError问题

问题根源

这个错误是由于原TF1.14.0模型的代码中存在变量作用域问题——logging_verbosity变量在被引用后才赋值,在TF2环境下即使禁用Eager Execution,保存机制的检查逻辑会触发这个未定义变量的错误。

可行解决方案

1. 修复模型代码中的变量作用域问题

排查模型的自定义层、辅助函数,找到涉及logging_verbosity的代码块,确保变量在使用前完成初始化:

# 错误示例:先引用后赋值
def custom_logger():
    if logging_verbosity > 0:
        print("Model log")
    logging_verbosity = 1

# 修正后:先初始化变量
def custom_logger():
    logging_verbosity = 1  # 先赋值再使用
    if logging_verbosity > 0:
        print("Model log")

2. 使用TF1兼容的SavedModel保存方式

既然已经禁用了Eager Execution,直接用TF1的保存API并指定签名映射,避免TF2保存机制的兼容性冲突:

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

# 定义模型输入占位符(匹配你的模型输入shape)
input_tensor = tf.compat.v1.placeholder(tf.float32, shape=(None, 224, 224, 3), name="model_input")
output_tensor = teacher(input_tensor)

# 构建服务签名
serving_signature = tf.compat.v1.saved_model.signature_def_utils.predict_signature_def(
    inputs={"input": input_tensor},
    outputs={"output": output_tensor}
)

# 保存为SavedModel格式
tf.compat.v1.saved_model.save(
    obj=teacher,
    export_dir="saved_model/tea_model",
    signature_def_map={
        tf.saved_model.DEFAULT_SERVING_SIGNATURE_DEF_KEY: serving_signature
    }
)

3. 逐步重构为TF2原生模型(推荐长期方案)

如果允许,移除tf.compat.v1.disable_eager_execution(),将TF1风格的代码重构为TF2 Keras原生写法,从根源解决兼容性问题:

# 替换TF1占位符为TF2 Input层
input_layer = tf.keras.Input(shape=(224, 224, 3))
# 确保模型的前向传播适配TF2 eager模式
output_layer = teacher(input_layer)
# 封装为标准TF2 Keras模型
tf2_model = tf.keras.Model(inputs=input_layer, outputs=output_layer)
# 直接保存为SavedModel
tf2_model.save("saved_model/tea_model")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 01:41:02