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

TensorFlow早停报错:val_loss指标不可用,求解决方案

解决思路

1. 直接修复警告问题

警告的核心原因是:你在重新训练最佳模型时(grbe=grid.best_estimator_.fit(X_train, y_train)),没有传入验证集参数,导致模型训练时没有验证集,EarlyStopping监控的val_loss指标不存在。

解决方法二选一:

  • 方法一:给最佳模型训练加上验证集
    修改最后一行代码,加上model__validation_split=0.2参数,让模型训练时生成验证集,这样val_loss就会被计算:
    grbe = grid.best_estimator_.fit(X_train, y_train, model__validation_split=0.2)
    
  • 方法二:仅在网格搜索时启用早停
    如果不需要在最佳模型的二次训练中使用早停,可以把EarlyStopping的回调仅传入网格搜索的训练流程:
    1. 修改KerasClassifier的定义,移除固定的callbacks参数:
      ('model', KerasClassifier(build_fn=create_model, verbose=2))
      
    2. 在grid.fit时传入回调和验证集参数:
      grid_result = grid.fit(X_train, y_train, model__validation_split=0.2, model__callbacks=[early_stopping])
      
    这样二次训练最佳模型时就不会触发早停,也就不会出现警告。

2. 修复潜在的数据泄露问题

当前使用sklearn的Pipeline会导致SMOTE被应用到验证集上,这会污染验证数据,影响模型评估的准确性。正确的做法是使用imblearn的Pipeline,它会自动区分采样步骤和转换步骤,仅在训练集上执行SMOTE:

  1. 安装imblearn(如果没装):pip install imbalanced-learn
  2. 导入imblearn的Pipeline:
    from imblearn.pipeline import Pipeline
    
  3. 保持原有的steps定义不变,只是替换Pipeline的来源即可。

3. 可选:规范指标名称

将model.compile中的metrics=['Recall']改为metrics=['recall'],符合Keras指标名称的小写规范,避免可能的名称匹配问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 00:14:57