Keras flow_from_directory是否每个epoch遍历所有样本?
Keras
flow_from_directory 样本遍历逻辑详解 好问题!我来给你掰扯清楚这个方法的核心行为细节~
- 默认行为(
shuffle=True,这是默认配置):- 每个epoch启动时,会把整个数据集的样本顺序彻底打乱一次。
- 之后会按批次依次抽取样本,直到遍历完所有样本(或者达到你设定的
steps_per_epoch数量)。 - 拿你的例子来说:300张图像、batch_size=30、
steps_per_epoch=10,刚好等于总样本数//batch_size(300÷30=10),那这个epoch里每个样本都会被遍历恰好一次,完全没有重复。
- 关闭打乱的情况(
shuffle=False):- 不会打乱样本顺序,每个epoch都会严格按照子目录里的文件原始顺序来抽取批次,只要
steps_per_epoch设置正确,同样会遍历所有样本。
- 不会打乱样本顺序,每个epoch都会严格按照子目录里的文件原始顺序来抽取批次,只要
- 特殊场景的处理:
- 要是你设置的
steps_per_epoch大于总样本数//batch_size(比如设成12),那前10个step遍历完所有样本后,剩下的2个step会从已经打乱过的数据集开头重新取样本,这时候就会出现重复的样本了。 - 反过来,如果
steps_per_epoch小于这个数值,那这个epoch只会遍历部分样本,剩下的样本不会被用到。
- 要是你设置的
这里要特别纠正一个误区:它不是每个step都从整个数据集独立随机采样。flow_from_directory的默认逻辑是「epoch级打乱+顺序批次抽取」,每个epoch内的样本是按打乱后的固定顺序输出,不会每一步都重新对全量数据集做随机采样。
内容的提问来源于stack exchange,提问作者Razorocean
相关产品推荐
相关产品推荐

