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

Keras中validation_split未按预期划分验证集问题求助

问题原因分析
  • 实际加载的样本数未达预期:你以为训练集有24977张图像,但实际导入到x_2和y中的样本数只有7030张——703正好是7030的10%。大概率是图像加载环节出了问题:
    • 部分图像格式损坏、不兼容,加载时被自动跳过;
    • 图像路径配置错误,仅加载了部分文件夹下的图像;
    • 数据预处理时意外截断了数据集(比如误写了x_2 = x_2[:7030]这类切片代码)。
  • 误解validation_split的逻辑:Keras的这个参数是基于传入model.fit()的实际样本数计算验证集大小的,而非你预设的原始训练集总数。输入数据的样本数不对,验证集规模自然会偏离预期。
解决方案
  1. 先确认实际样本数
    在model.fit()前添加代码,核实真实的样本量:

    print(f"x_2的样本数: {x_2.shape[0]}")
    print(f"y的样本数: {y.shape[0]}")
    

    如果输出不是24977,直接聚焦数据加载环节排查问题。

  2. 检查图像加载流程

    • 去原始图像文件夹统计真实有效图像数量,排除隐藏文件、损坏无法读取的图像;
    • 核对加载代码(无论是用PIL、OpenCV还是Keras的ImageDataGenerator),查看是否有跳过错误图像的逻辑,统计成功加载的图像总数;
    • 若使用flow_from_directory,确认target_size、class_mode等参数配置正确,避免遗漏类别或图像。
  3. 确保输入与标签样本数一致
    Keras训练前会检查x_2和y的样本数是否匹配,若不匹配会直接报错,但如果加载时部分图像对应的标签丢失,也可能出现样本数不一致的情况,需仔细核对。

  4. 手动分割验证集(更稳妥)
    嫌validation_split逻辑不直观的话,直接手动切分数据集,可控性更强:

    from sklearn.model_selection import train_test_split
    
    x_train, x_val, y_train, y_val = train_test_split(x_2, y, test_size=0.1, random_state=42)
    model.fit(x_train, y_train, epochs=5, validation_data=(x_val, y_val))
    

    这种方式能精准控制验证集比例,固定随机种子还能保证实验结果可复现。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 18:30:55