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

如何在Keras Tuner调参后完整保存含超参数与权重的模型?

解决Keras Tuner Hyperband调优后模型存储优化问题

问题根源

直接使用save_model或保存为h5文件无效,核心原因是HyperModel基于动态超参数生成模型结构,普通保存方式无法完整记录模型的结构生成逻辑,或者加载时未先基于最优超参数重建模型结构,导致结构不匹配报错。

优化存储空间的解决方案

第一步:清理调优阶段冗余文件

Hyperband生成的30个试验文件夹,调优完成后仅需保留最优试验的checkpoint,其余可直接删除——这能立刻减少大部分初始存储占用。

第二步:最优超参数持久化(仅存一份)

把最优超参数保存为JSON文件,代替重复保存完整模型结构,后续所有实体的模型都基于这份超参数重建:

# 保存最优超参数
best_hps = tuner.get_best_hyperparameters(num_trials=1)[0]
import json
with open("best_hps_config.json", "w") as f:
    json.dump(best_hps.values, f)

# 后续加载超参数重建模型
with open("best_hps_config.json", "r") as f:
    hps_config = json.load(f)
best_hps = keras_tuner.HyperParameters.from_config(hps_config)
my_model = tuner.hypermodel.build(best_hps)

第三步:每个实体仅保存权重文件(核心省空间操作)

每个实体训练完成后,只保存模型权重而非完整模型,权重文件体积远小于完整模型:

# 实体训练完成后保存权重
my_model.save_weights(f"entity_{entity_id}_weights.h5")

# 加载时先重建模型,再加载权重
my_model.load_weights(f"entity_{entity_id}_weights.h5").expect_partial()

可选:若需保存完整模型(适合部署场景)

如果必须保存完整模型,需确保模型结构可序列化(无不可序列化的自定义层,若有则实现get_config和from_config方法),使用SavedModel格式而非h5:

# 保存完整模型
my_model.save(f"entity_{entity_id}_saved_model")

# 直接加载模型
my_model = keras.models.load_model(f"entity_{entity_id}_saved_model")

之前操作无效的原因排查

  • h5格式对动态生成的模型结构支持有限,无法完整序列化HyperModel的动态参数依赖,导致加载时结构不匹配。
  • 若直接调用load_model而未先基于超参数重建模型结构,SavedModel无法逆向生成动态构建的模型结构,引发报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 17:22:48