numpy 关于输入长度的ImageDataGenerator

bvuwiixz  于 2023-06-23  发布在  其他
关注(0)|答案(1)|浏览(106)

我有一个包含3D numpy数组的功能列表,这些数组表示RGB图像,以及一个1D numpy数组的标签列表。我想使用ImageDataGenerator.flow()执行图像增强。当将两个列表传递给.flow()时,我得到:

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

但是,当我打印x.shape和y.shape时,它告诉我它们是相同的长度。下面是我的代码:

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), ...

这是怎么回事?

avkwfej4

avkwfej41#

我通过添加这行代码解决了这个问题。形状仍然是一样的,但不知何故,它的工作后,运行这个。

labels = np.reshape(labels, (features.shape[0], -1))

相关问题