是什么" shuffle"在keras的fit_generator中做什么?

时间:2018-02-28 10:22:44

标签: machine-learning neural-network keras

我手动构建了一个数据生成器,每个调用产生一个[input, target]元组。我将我的发生器设置为每个时期对训练样本进行洗牌。然后我使用fit_generator来呼叫我的generator,但是在#34; shuffle"这个函数中的参数:

fit_generator(self, generator, steps_per_epoch=None, epochs=1, verbose=1, callbacks=None, validation_data=None, validation_steps=None, class_weight=None, max_queue_size=10, workers=1, use_multiprocessing=False, shuffle=True, initial_epoch=0)

来自Keras API

  

shuffle :是否在开始时改组批次的顺序   每个时代仅用于Sequence的实例   (keras.utils.Sequence)

我想" shuffle"应该是generator的工作。当我的自定义generator决定在每次迭代中输出哪个批处理时,它如何改变批次的顺序?

1 个答案:

答案 0 :(得分:7)

正如您引用的文档所述, shuffle 参数仅与实现keras.utils.Sequence的生成器相关。

如果您使用的是“简单”生成器(例如keras.preprocessing.image.ImageDataGenerator或您自己的自定义非序列生成器),那么该生成器会实现一个返回单个批处理的方法(使用yield - 您可以在this question中了解有关它的更多信息。因此,只有生成器本身控制返回的批处理。

引入了

keras.utils.Sequence来支持多处理:

  

序列是一种更安全的多处理方式。这种结构   保证网络每个样本只训练一次   时代不是发电机的情况。

为此,您需要实现一个通过批处理索引返回批处理的方法(允许多个工作程序同步):__getitem__(self, idx)。如果启用 shuffle 参数,则将使用随机顺序的索引调用__getitem__方法。

但是,您也可以将其设置为false,并通过实施on_epoch_end方法自行播放。