You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何保存在sklearn/imblearn pipeline中经KerasClassifier封装的Keras模型

封装进Sklearn/Imblearn Pipeline的Keras模型保存方案说明

你提到的几种方法都是可以使用的,但是不同方法的适用场景和操作限制有区别:

  • pickle/joblib
    这是保存完整pipeline最简便的方案,可以直接序列化包含KerasClassifier/KerasRegressor的整个pipeline对象,不需要拆分预处理步骤和Keras模型。

    注意事项:该方法会同时序列化Keras模型的结构、权重以及pipeline所有步骤的参数,但是版本兼容性极差,加载环境的TensorFlow、Sklearn、Imblearn版本必须和保存时完全一致,否则大概率会出现加载报错,因此只适合临时保存同环境下复用的模型,不适合长期存档或跨环境共享。

  • tf.keras.models.save_model / model.to_json()
    这两类是Keras原生的模型保存方法,不能直接作用于整个pipeline,需要拆分pipeline分别保存,操作步骤如下:
    1. 从训练完成的pipeline中提取Keras原生模型对象:
      # 替换为你pipeline里KerasClassifier对应的步骤名称
      keras_model = pipeline.named_steps['keras_clf'].model
      
    2. 用Keras原生方法保存模型:
      # 同时保存结构和权重
      tf.keras.models.save_model(keras_model, "trained_keras_model.h5")
      # 如果用to_json方法需要额外单独保存权重
      # model_json = keras_model.to_json()
      # with open("model_structure.json", "w") as f:
      #     f.write(model_json)
      # keras_model.save_weights("model_weights.h5")
      
    3. 清空Keras封装器的模型属性后,单独保存pipeline剩余部分:
      pipeline.named_steps['keras_clf'].model = None
      joblib.dump(pipeline, "pipeline_without_keras.pkl")
      
    加载时反向操作即可:先加载空pipeline,再加载Keras模型赋值回对应步骤的model属性。

    注意事项:该方案保存的Keras模型兼容性更强,跨版本加载成功率远高于pickle/joblib直接序列化,更适合需要长期存档的模型。

内容的提问来源于stack exchange,提问作者TheodorosNikoleris

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 23:09:03