Keras load_model在Colab可正常加载 本地Jupyter/VSCode加载失败
问题根因
你遇到的报错本质是本地环境的Keras加载器在读取路径时,错误将SavedModel格式的目录识别为HDF5格式的单文件,尝试以二进制文件方式打开目录触发系统级错误。
Colab环境无异常的核心原因是Colab默认使用TensorFlow绑定的tf.keras作为Keras实现,格式识别逻辑对SavedModel目录做了兼容;而本地环境大概率使用了独立发行的Keras包,或者Keras自动格式识别逻辑失效。
解决方法
- 统一Keras导入来源
将代码中所有Keras相关的导入语句全部替换为TensorFlow内置的Keras实现,避免独立Keras包的兼容问题:
# 替换原有的 import keras 或 from keras import xxx from tensorflow import keras from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Dense, Flatten from tensorflow.keras.optimizers import Adam
- 加载时显式指定格式
调用load_model时显式传入save_format="tf"参数,强制加载器按照SavedModel格式处理路径,跳过自动格式识别的易出错环节:
loaded_model = keras.models.load_model(save_path, save_format="tf")
- 关于tf.saved_model.load的兼容问题补充
tf.saved_model.load是TensorFlow底层的SavedModel加载接口,返回的是原生TensorFlow计算图实例,本身就不支持Keras模型的predict()、fit()等上层方法,不属于异常。如果需要使用该接口加载后调用Keras方法,可以手动封装为Keras模型对象:
loaded_saved_model = tf.saved_model.load(save_path) loaded_model = keras.models.Model( inputs=loaded_saved_model.signatures["serving_default"].inputs, outputs=loaded_saved_model.signatures["serving_default"].outputs )
内容的提问来源于stack exchange,提问作者Ivan_Denisovich
相关产品推荐
相关产品推荐

