[debug]Keras 3 不支持旧版 SavedModel 格式文件的解决方案

在 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)

详细步骤说明

  1. 使用 TFSMLayer 加载旧版模型
    使用 TFSMLayer 将旧版 SavedModel 作为一个推理层加载到新的 Keras 模型中。

  2. 构建新的 Keras 模型
    使用 tf.keras.Inputtf.keras.Model 构建一个新的 Keras 模型,保持数据类型和输入维度一致。

  3. 保存为 Keras 3 支持的格式
    使用 model.save() 方法,将新构建的模型保存为 .keras.h5 格式,以便在 Keras 3 中直接加载和使用。

结果

转换后的模型可以直接使用 Keras 3 的 load_model() 方法进行加载,无需再使用 TFSMLayer 处理。

model = tf.keras.models.load_model(new_model_path)

总结

用其他方法读取旧版本模型,再保存为新版本;
这里读取旧版本模型的方式很有趣,创建一个大的模型,将旧版本数据作为这个大的模型的一部分读取的;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值