Keras Tuner调参时两种最优模型获取方法结果存在差异问题咨询
问题产生的核心原因
两个方法获取的模型仅网络结构完全一致,但权重状态存在本质区别:
- 方法1得到的
best_model1是未经过训练的随机初始化模型get_best_hyperparameters()仅返回搜索到的最优超参数配置,调用hypermodel.build()时只会按照该配置搭建网络结构,权重会走默认的随机初始化逻辑,不会加载搜索阶段训练得到的权重参数,因此评估结果是随机权重对应的输出,和训练完成的模型结果差异极大。 - 方法2得到的
best_model2是搜索阶段训练完成的最优权重模型get_best_models()会直接返回搜索过程中验证集表现最优的那组trial训练完成后的模型,已经保留了完整的训练后权重,评估结果是训练后的正常表现。
你看到的summary()输出完全一致是因为summary()仅统计网络的层结构、参数量等拓扑信息,不会展示权重的具体数值,因此结构相同的模型输出完全相同。
如果要让best_model1达到和best_model2相近的效果,你需要使用和tuner.search()阶段完全相同的训练配置(训练数据、epoch、回调、优化器参数等)对best_model1重新训练即可。
内容的提问来源于stack exchange,提问作者Rodrigo_V
相关产品推荐
相关产品推荐

