【问题标题】:Does Keras flow_from_directory iterate through every sample in a directory?Keras flow_from_directory 是否遍历目录中的每个样本?
【发布时间】:2026-02-03 22:45:01
【问题描述】:

在 Keras 预处理 ImageDataGenerator 模块中,flow_from_directory 方法用于从包含图像子目录的目录创建迭代器。迭代器无限期地运行,创建批量图像。我的问题是,它是否遍历每个时代的每个样本?

例如,如果我总共有 300 张图像,并且我的批量大小为 30,如果我执行 10 步,它是否会遍历每个样本一次?还是每一步都是来自整个数据集的独立随机样本?如果我们确实遍历每个样本,当我的样本大小不能被批量大小整除(如 304 个图像)时会发生什么?在第 11 步,迭代器是否知道先获取最后 4 个样本,然后从整个数据集中获取另外 26 个样本?

【问题讨论】:

  • 你找到答案了吗?因为正如我现在看到的,如果 batch_size 很小,steps_per_epoch 也很小,并且目录中有很多样本,它就不能正确训练。我认为它不会遍历 epoch 中的每个样本。

标签: python tensorflow keras


【解决方案1】:

根据我从这里https://keras.io/preprocessing/image/ 和那里https://github.com/keras-team/keras/blob/master/keras/preprocessing/image.py 的代码行的理解,是的,它遍历所有样本,并在number_batches >= len(x_train) / batch_size 时停止。它对每个 epoch 执行此操作,但如果 shuffle = True,则每个 epoch 的批次可能不同。

【讨论】: