Python中使用TensorFlow/Keras加载h5模型失败求助
解决Keras加载模型失败的问题
你的问题根源在于:你手里的model.h5.meta、model.h5.index、model.h5.data-00000-of-00001是TensorFlow Checkpoint检查点格式,不是Keras保存的单一.h5完整模型文件,所以keras.models.load_model()无法直接加载这类文件。
下面是两种可行的解决方法:
方法1:直接用TensorFlow Checkpoint恢复模型
需要先复现和训练时完全一致的模型结构,再通过Checkpoint加载权重:
import tensorflow as tf from tensorflow import keras # 复现训练时的模型结构(必须和训练代码完全一致) def build_training_model(): model = keras.Sequential([ # 示例层,替换成你实际的模型层 keras.layers.Dense(64, activation='relu', input_shape=(32,)), keras.layers.Dense(10, activation='softmax') ]) return model # 初始化模型 model = build_training_model() # 创建Checkpoint对象,绑定要恢复的模型 checkpoint = tf.train.Checkpoint(model=model) # 加载检查点,路径传入检查点前缀(即model.h5,无需加后缀) # 若有部分变量未被恢复(如优化器状态),可加.expect_partial()避免报错 checkpoint.restore("./model.h5").expect_partial() # 验证模型可用 # test_input = tf.random.normal((1, 32)) # print(model.predict(test_input))
方法2:转换为Keras完整.h5模型文件
如果需要用keras.models.load_model()加载,可以先加载权重到模型,再保存为完整Keras模型:
import tensorflow as tf from tensorflow import keras # 同样先复现模型结构 model = build_training_model() # 加载Checkpoint权重 model.load_weights("./model.h5") # 保存为完整Keras .h5模型 model.save("complete_model.h5") # 之后即可用Keras加载 loaded_model = keras.models.load_model("complete_model.h5")
注意事项
- 模型结构必须和训练时完全一致,包括输入形状、层类型、参数数量、激活函数等,否则会加载失败。
- 建议统一使用
tf.kerasAPI,避免混用原生Keras和TensorFlow Keras导致兼容性问题。 - 加载Checkpoint时,路径要传入检查点的前缀(如
./model.h5),不要传入单个的.data或.meta文件路径。
内容的提问来源于stack exchange,提问作者snowy
相关产品推荐
相关产品推荐

