在 Keras 3 中尝试加载旧版 SavedModel
格式时,可能会遇到以下错误:
ValueError: File format not supported: filepath=./NSFW-cache/clip_autokeras_binary_nsfw.
Keras 3 only supports V3 `.keras` files and legacy H5 format files (`.h5` extension).
Note that the legacy SavedModel format is not supported by `load_model()` in Keras 3. In order to reload a TensorFlow SavedModel as an inference-only layer in Keras 3, use `keras.layers.
TFSMLayer(./NSFW-cache/clip_autokeras_binary_nsfw, call_endpoint='serving_default')` (note that your `call_endpoint` might have a different name).
解决方案
为了解决这个问题,你可以按照以下步骤将旧版的 SavedModel
格式模型转换为 Keras 3 支持的 .keras
或 .h5
格式:
import tensorflow as tf
from tensorflow.keras.layers import TFSMLayer
# 使用 TFSMLayer 加载 SavedModel 格式的模型
model_dir = "./NSFW-cache/clip_autokeras_binary_nsfw"
model_layer = TFSMLayer(model_dir, call_endpoint='serving_default')
# 创建输入层并构建一个新的 Keras 模型
inputs = tf.keras.Input(shape=(768,), dtype=tf.float32)
outputs = model_layer(inputs)
model = tf.keras.Model(inputs, outputs)
# 保存为 Keras 3 支持的格式
new_model_path = "./NSFW-cache/clip_autokeras_binary_nsfw.keras" # 保存为 .keras 格式
model.save(new_model_path)
详细步骤说明
-
使用
TFSMLayer
加载旧版模型:
使用TFSMLayer
将旧版SavedModel
作为一个推理层加载到新的 Keras 模型中。 -
构建新的 Keras 模型:
使用tf.keras.Input
和tf.keras.Model
构建一个新的 Keras 模型,保持数据类型和输入维度一致。 -
保存为 Keras 3 支持的格式:
使用model.save()
方法,将新构建的模型保存为.keras
或.h5
格式,以便在 Keras 3 中直接加载和使用。
结果
转换后的模型可以直接使用 Keras 3 的 load_model()
方法进行加载,无需再使用 TFSMLayer
处理。
model = tf.keras.models.load_model(new_model_path)
总结
用其他方法读取旧版本模型,再保存为新版本;
这里读取旧版本模型的方式很有趣,创建一个大的模型,将旧版本数据作为这个大的模型的一部分读取的;