TensorFlow.NET加载TF2.18 SavedModel报错,求格式兼容方案
解决TensorFlow 2.18模型无法被TensorFlow.NET加载的保存方案
问题本质
- 用
tf.saved_model.save()生成的SavedModel,被TensorFlow.NET误判为TF2.5之前的版本,触发加载异常 - TensorFlow 2.18强制要求
model.save()指定.keras或.h5后缀,而.h5不被TensorFlow.NET支持
可行保存方案
方案1:用.keras格式保存后转文件夹加载
- Python端保存模型:
# 保存为TF推荐的原生Keras格式 model.save("model.keras") - 将
.keras文件转成文件夹:- 重命名
model.keras为model.zip,解压到model_keras_saved文件夹
- 重命名
- .NET端加载解压后的文件夹:
// 跳过Keras模型加载逻辑,直接加载SavedModel _model = tf.saved_model.load(modelPath);
方案2:带兼容性参数保存SavedModel
在Python保存时添加兼容性选项,避免生成TF.NET无法识别的新格式特征:
import tensorflow as tf save_options = tf.saved_model.SaveOptions(experimental_custom_gradients=False) tf.saved_model.save(model, "model_SavedModel/", options=save_options)
之后在.NET端用tf.saved_model.load()加载,不要用load_model。
方案3:临时降级TF版本保存
如果前两种方案无效,可临时降级到TF 2.5~2.10版本保存兼容格式:
- 安装指定版本:
pip install tensorflow==2.10 - 加载原模型并保存:
import tensorflow as tf model = tf.keras.models.load_model("你的原模型路径") model.save("model_compatible")
再用TensorFlow.NET加载这个保存后的模型。
核心提示
TensorFlow.NET对新版Keras格式的支持存在滞后,优先用tf.saved_model.load()加载SavedModel结构,而非tf.keras.models.load_model()加载Keras模型,可绕过版本校验问题。
内容的提问来源于stack exchange,提问作者Le Magicien Annonyme
相关产品推荐
相关产品推荐

