fit_generator 中的 shuffle 和 flow_from_directory 中的 shuffle 有什么区别?

数据挖掘 机器学习 Python 深度学习 喀拉斯 张量流
2022-03-08 03:10:16

我正在使用 Keras 创建一个深度学习模型,我想知道方法中的参数和方法中的参数shuffle什么区别fit_generator()shuffleflow_from_directory()

1个回答

fit_generator()文档:

洗牌:布尔值。是否在每个 epoch 开始时打乱批次的顺序。仅与Sequence ( keras.utils.Sequence) 的实例一起使用。steps_per_epoch不是时没有 效果None

因此,如果您使用生成器并进行设置steps_per_epoch,它将无效。如果使用Sequence生成器,它将在每个时期以不同的顺序获取批次。例如,在第一个时期它可能会得到my_seq[0]然后my_seq[1]然后my_seq[2](等等),在第二个时期它可能会在下一个时期得到my_seq[2]然后my_seq[0]然后my_seq[1]等等(即注意这my_seq[i]是由Sequence我们定义的生成器)。

flow_from_directory()文档:

shuffle : 是否打乱数据(默认: True)

目前尚不清楚何时以及如何进行洗牌。所以我们必须看一下源代码。通过这样做,我们发现该flow_from_directory()方法返回一个类的实例DirectoryIterator,在其文档字符串中我们可以看到以下内容:

shuffle:布尔值,是否在 epoch 之间打乱数据。

所以它会在每个时期开始时打乱所有数据(即在每个时期要读取的所有训练图像的列表)。