为什么keras test generator only return batch size作为数组形状的长度?

Why does keras test generator only return batch size as the length in the shape of the array?

这是我的测试生成器代码:

test_generator=test_datagen.flow_from_dataframe(
                      dataframe=df_test,
                      directory=img_dir,
                      x_col="filename",
                      y_col="label",
                      batch_size=32,
                      seed=42,
                      shuffle=False,
                      class_mode="categorical",
                      target_size=(img_size,img_size))

为什么在创建生成器后 batch_size 参数仍然重要:

Found 229 validated image filenames belonging to 2 classes.

比如生成器创建后数组的shape被限制为32 - batch size:

x_test, y_test = test_generator.next()

这是 x_test 的形状,我假设这是包含实际图像数据的数组:

>>> print(x_test.shape)
(32, 224, 224, 3)

这是我将其与预测长度进行比较后的结果:

print(len(x_test))  #32
print(len(y_test))  #32
print(len(pred))    #229

由于 y_test 的大小与预测有很大不同,我很难进行任何类型的比较。 y_test 与批量大小设置为 32 的 test_generator 直接相关。

测试生成器标签的元素数量似乎正确:

test_generator.labels

[0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0........

那为什么x_test的形状只有32呢?我显然想错了应该是229,因为有229个样本,229个标签?

非常感谢您的建议!

正如文档 here 所述,生成器 returns 是什么:

A DataFrameIterator yielding tuples of (x, y) where x is a numpy array containing a batch of images with shape (batch_size, target_size, channels) and y is a numpy array of corresponding labels.

因此,test_generator 是一个 DataFrameIterator,每次调用它时,它都会为您提供一批形状为 (32, 224, 224, 3) 的图像。因此,您错误地认为它应该是 229,因为有 229 个样本。每次它都会从 229 个样本中为您提供一批 32 张图像。