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

相同参数下KerasGridSearch与fit()训练模型结果为何差异显著?

KerasGridSearch与同参数直接fit()训练结果差异问题

模型调优使用的固定参数配置

param_grid = {
'unit_1': 128, 
'unit_2': 64,
'lr': 3e-4, 
'activ': 'relu',
'epochs': 400, 
'batch_size': 8}

KerasGridSearch调用代码

kgs = KerasGridSearch(build_classifier_model, param_grid,
                    monitor='val_loss', greater_is_better=False)

kgs.search({'text': x_train_text, 'vector': x_train_vector}, y_train,
               sample_weight=y_train_weight,
               batch_size=param_grid['batch_size'],
               validation_data = ({'text': x_val_text, 'vector': x_val_vector},
                                  y_val,y_val_weight),
               callbacks=[es])

GridSearch输出模型的评估指标

  • Loss: 1.5514
  • Accuracy: 0.6601
  • Weighted accuracy: 0.6879

同参数直接调用fit()的训练代码

history = classifier_model.fit({'text': x_train_text, 'vector': x_train_vector},
                               y_train,
                               sample_weight=y_train_weight,
                               steps_per_epoch=len(x_train_text) // best_params['batch_size'],
                               validation_data=({'text': x_val_text,
                                                 'vector': x_val_vector},
                                                y_val,y_val_weight),
                               batch_size = best_params['batch_size'],
                               epochs=best_params['epochs']+10,
                               callbacks=[es])

直接fit()训练模型的评估指标

  • Loss: 1.0226
  • Accuracy: 0.4915
  • Weighted accuracy: 0.5092

已多次重复运行notebook,该差异现象稳定复现,暂未定位到问题原因,若排查需要补充其他信息可随时告知。

核心排查方向

对比两段训练逻辑的入参,存在3处明确的配置差异,是导致结果稳定不一致的核心诱因:

  • 训练轮数不匹配:GridSearch调用时使用param_grid中定义的400轮作为最大训练轮数,直接fit时将最大训练轮数设置为best_params['epochs']+10即410轮。即使配置了早停回调,若早停patience值大于10,额外的训练轮次会改变模型收敛状态,直接影响最终指标。
  • 每轮训练步数计算逻辑不一致:GridSearch调用时未手动传入steps_per_epoch参数,由框架自动根据样本总量和batch_size计算每轮执行步数,可覆盖全部训练样本;直接fit时手动设置steps_per_epoch=len(x_train_text) // best_params['batch_size'],整除操作会丢弃每轮最后不足一个batch的样本,长期训练下的样本分布偏差会直接改变模型收敛路径。
  • 最优权重返回逻辑不一致:KerasGridSearch默认会返回监控指标(这里是val_loss)最优轮次的模型权重;直接调用fit时,若早停回调未开启restore_best_weights=True,返回的是训练停止时最后一步的权重,两者对应的模型训练阶段完全不同,指标自然存在明显差异。

排除以上配置差异后如果问题仍存在,再检查是否固定了全链路随机种子(Python random库、Numpy、TensorFlow全局种子),避免权重随机初始化带来的结果波动。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 01:36:15