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

Keras ImageDataGenerator调用flow报x与y长度不一致ValueError

报错根因

你调用ImageDataGenerator.flow()方法时传参错位,把验证集的图像数组错传给了训练生成器的标签参数位置。
从报错信息就能直接定位问题:

  • 报错里的x长度为27455,刚好是你训练集的样本量,形状是标准的4维图像张量格式
  • 报错里的y长度为7172,刚好是你验证集的样本量,形状同样是4维图像张量——而正常的分类标签应该是2维(one-hot编码,形状为(样本数, 类别数))或者1维(整数编码,形状为(样本数,)),不可能是图像格式
    你之前调整维度无效是因为维度操作本身完全正确:给灰度图在axis=3位置扩充通道维度的写法,完全符合CNN对输入张量的格式要求,问题和维度设置无关。
    这个坑基本都是复制代码时漏改变量导致的:写完训练集生成器的flow调用后,直接复制整行改datagen和生成器变量名,没把参数里的训练集变量替换成验证集对应变量,甚至直接把验证集图像塞到了训练生成器的y参数位。
修复步骤
  • 逐行检查两个生成器的flow方法传参,严格保证x、y和所属数据集匹配:
    训练集生成器参考写法:
    train_generator = train_datagen.flow(
        x=training_images,
        y=training_labels,
        batch_size=32 # 替换为你作业要求的batch_size值
    )
    
    验证集生成器参考写法:
    validation_generator = validation_datagen.flow(
        x=validation_images,
        y=validation_labels,
        batch_size=32 # 替换为你作业要求的batch_size值
    )
    
  • 传参前可先打印标签数组形状做校验:training_labels第一维长度必须等于27455,validation_labels第一维长度必须等于7172,二者都不能是4维结构。
  • 尽量用关键字方式传参,不要按位置顺手写参数,能很大程度避免参数顺序错位的问题。

补充:这个是Coursera CNN手语识别作业的高频报错,不用怀疑你之前的维度扩充逻辑,查传参就能解决。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 20:12:15