加载Keras JSON模型时遇TypeError:无法定位Sequential类
问题原因与解决方案
核心问题
你混用了原生keras和tensorflow.keras的导入模块,导致模型加载时无法识别Sequential类:
- 加载模型用的是
from keras.models import model_from_json(原生keras) - 但定义模型时用的是
from tensorflow.keras.models import Sequential(TensorFlow集成的Keras)
两者属于不同命名空间,序列化的模型配置里的Sequential无法被原生keras的model_from_json识别。
解决步骤
1. 统一导入模块
删除原生keras的导入,全部改用tensorflow.keras的导入:
import numpy as np from tensorflow.keras.preprocessing import image from tensorflow.keras.models import model_from_json, Sequential, Model from tensorflow.keras import layers from tensorflow.keras.preprocessing.image import ImageDataGenerator, load_img, img_to_array from tensorflow.keras.layers import Conv2D, MaxPooling2D, Dense, GlobalAveragePooling2D, Dropout, Flatten from tensorflow.keras.applications import VGG16
2. 重新加载模型
保持加载代码不变,现在model_from_json会从tensorflow.keras的命名空间中找到Sequential类:
json_file = open('./model/model.json', 'r') loaded_model_json = json_file.read() json_file.close() loaded_model = model_from_json(loaded_model_json) loaded_model.load_weights("model.h5")
额外建议
后续保存模型时,推荐使用TensorFlow Keras的完整保存方式,更简洁且能避免这类命名空间问题:
# 保存完整模型 model.save('./model/my_full_model.h5') # 加载完整模型 from tensorflow.keras.models import load_model loaded_model = load_model('./model/my_full_model.h5')
内容的提问来源于stack exchange,提问作者Arvin
相关产品推荐
相关产品推荐

