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

ImageDataGenerator.flow()报错x与y长度不匹配,但实际维度一致的问题

ImageDataGenerator.flow()维度不匹配问题排查与解决

问题现象

使用ImageDataGenerator.flow()执行图像增强时,触发维度不匹配错误:

ValueError: x (images tensor) and y (labels) should have the same length. Found: x.shape = (32, 32, 3), y.shape = (2, 4)

但打印特征和标签数组的形状时,结果显示样本数一致:

  • features.shape输出 (2, 32, 32, 3)
  • labels.shape输出 (2, 4)

原始代码

dategen = ImageDataGenerator(
    rescale = 1./255
)

labels = list(df["label"])
filepaths = list(df["photo"])

features = []

for filepath in filepaths:
    img = Image.open(filepath)
    img = img.resize((32,32))
    features.append(np.array(img))

features = np.array(features)
labels = np.array(labels)

print(features.shape) #Prints (2, 32, 32, 3)
print(labels.shape)   #Prints (2, 4)

train_gen = datagen.flow(
    x = features,
    y = labels,
    batch_size = 1
)

错误尝试及新问题

误以为特征数组第一维度被截断,尝试扩展维度:

features = np.expand_dims(features, axis = 0)
print(features.shape) #Prints (1, 2, 32, 32, 3)

触发新的维度错误:

ValueError: ... Found: x.shape = (1, 2, 32, 32, 3), ...

核心原因

  1. 变量名拼写错误:代码中定义的ImageDataGenerator实例是dategen,但调用flow()时用的是datagen,两者不是同一个变量。如果之前环境中存在名为datagen的其他对象,会导致传入错误的x参数(比如单张图片的3维数组),从而触发维度不匹配。
  2. 错误的维度扩展:特征数组已经是符合要求的4维格式(样本数, 高度, 宽度, 通道数),强行扩展为5维反而不符合flow()的输入要求。

解决方案

  1. 修正变量名:将datagen.flow()改为dategen.flow(),确保使用自己定义的ImageDataGenerator实例:
train_gen = dategen.flow(
    x = features,
    y = labels,
    batch_size = 1
)
  1. 统一图片通道数:在读取图片时强制转为RGB格式,避免因灰度图导致特征数组维度不一致:
for filepath in filepaths:
    img = Image.open(filepath).convert('RGB')  # 强制转为3通道RGB
    img = img.resize((32,32))
    features.append(np.array(img))
  1. 确认标签格式:当前(2,4)的标签格式(2个样本,4维标签/one-hot编码)是符合要求的,无需修改。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 01:27:56