TensorFlow模型保存失败求助:KerasTensor序列化报错
Keras模型保存时KerasTensor序列化错误的解决方案
错误原因:
你的模型中包含未被Keras层封装的原生TensorFlow操作(比如报错里的tf.__operators__.getitem_10对应切片操作),这类操作生成的KerasTensor无法被H5格式的序列化器识别,导致保存失败。
修复方案:
- 封装原生TF操作为Lambda层:把模型中直接使用的TensorFlow原生操作(比如数组索引、
tf.strided_slice等)用tf.keras.layers.Lambda包裹,让Keras能正确追踪操作并序列化。示例:# 替换直接切片操作 # 原代码:x = input_tensor[:, :80, :100, :1] # 修改后: x = tf.keras.layers.Lambda(lambda t: t[:, :80, :100, :1])(input_tensor) - 替换所有非Keras层操作:遍历模型结构,确保所有张量变换都通过Keras内置层或Lambda层实现,避免直接调用TensorFlow原生API操作张量。
- 切换到SavedModel格式保存:如果不想修改模型结构,可使用TensorFlow原生的SavedModel格式保存,它对原生TF操作兼容性更好:
# 直接保存为SavedModel格式 model.save('model_path/saved_model') # 或显式指定格式 tf.keras.models.save_model(model, 'model_path/saved_model', save_format='tf')
验证方法:
保存完成后可加载模型验证功能:
loaded_model = tf.keras.models.load_model('model_path/saved_model') # 用测试数据验证输出一致性 test_pred = loaded_model.predict(test_input_data)
内容的提问来源于stack exchange,提问作者dimes
相关产品推荐
相关产品推荐

