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

如何从GridSearchCV调优出的最优Keras ANN中提取模型权重?

从GridSearchCV结果中提取最优ANN权重的方法

完全可以从现有调参流程的运行结果中直接提取最优模型的权重,不需要重跑超参数搜索流程,操作逻辑如下:

核心逻辑说明

你代码中已经定义了best_model = grid_search.best_estimator_,sklearn的GridSearchCV默认会在完成所有参数组合的交叉验证、定位到最优超参数组合后,自动使用全量训练集X_train、y_train重新训练对应参数的模型,这个实例已经携带了完整的训练后权重,不需要从交叉验证的单折模型中拼凑结果。

具体操作步骤

  1. 从KerasRegressor封装实例中取出底层原生Keras模型对象
    你使用的keras.wrappers.scikit_learn.KerasRegressor会把实际训练完成的Keras Sequential模型存在自身的.model属性下,直接访问即可拿到原生模型:
    best_keras_model = best_model.model
  2. 按需提取权重
    • 提取所有层的权重数组(返回值为numpy格式的列表,顺序和模型层定义顺序一致,包含每层的权重矩阵、偏置项):
      all_weights = best_keras_model.get_weights()
    • 单独查看每一层的权重细节:
      for layer_index, layer in enumerate(best_keras_model.layers):
          # 打印每层的权重、偏置项形状
          print(f"第{layer_index}层权重形状:{[w.shape for w in layer.get_weights()]}")
      
    • 完整保存模型(包含网络结构、权重、编译配置)到本地,后续可直接加载使用:
      best_keras_model.save("optimal_ann.h5")

常见注意点

  • 如果你初始化GridSearchCV时手动设置了refit=False,best_estimator_不会自动触发全量训练,自然不存在可提取的权重;你当前的代码使用默认参数,不受这个问题影响。
  • 不需要从cv_results_字典中查找单折训练的权重,该字段仅保存交叉验证过程的指标分数,不会存储具体模型的权重值。

内容的提问来源于stack exchange,提问作者Hoang Mai Trinh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.29 03:06:07