Machine learning 什么是;洗牌;在keras中安装发电机吗?

Machine learning 什么是;洗牌;在keras中安装发电机吗?,machine-learning,neural-network,keras,Machine Learning,Neural Network,Keras,我手动构建了一个数据生成器,它生成每个调用的[输入,目标]元组。我将生成器设置为每个历元洗牌训练样本。然后,我使用fit_generator调用我的generator,但是在这个函数中的“shuffle”参数会混淆: fit_generator(self, generator, steps_per_epoch=None, epochs=1, verbose=1, callbacks=None, validation_data=None, validation_steps=None, class_

我手动构建了一个数据生成器,它生成每个调用的
[输入,目标]
元组。我将生成器设置为每个历元洗牌训练样本。然后,我使用
fit_generator
调用我的
generator
,但是在这个函数中的“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:

洗牌:是否在开始时洗牌批次的顺序 每一个时代。仅用于序列的实例 (keras.utils.序列)


我认为“洗牌”应该是
生成器的工作。当我的自定义
generator
决定在每次迭代中输出哪个批次时,它如何洗牌批次的顺序?

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

如果您使用的是“简单”生成器(如keras.preprocessing.image.ImageDataGenerator或您自己的自定义非序列生成器),则该生成器将实现一个返回单个批次的方法(使用产量-您可以在中了解更多信息)。因此,只有生成器本身控制返回的批次

已引入以支持多处理:

序列是进行多处理的一种更安全的方法。这个结构 保证网络每次仅对每个样本进行一次训练 发电机的情况并非如此

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


但是,您也可以将其设置为false,并通过在_epoch_end
方法上实现
,对自己进行洗牌。

因此,如果我使用自己的自定义非序列生成器并在fit generator中设置shuffle=True,会发生什么情况?不会发生任何情况。如果查看源代码:,则仅当生成器是序列时才使用该参数。在方法uu getitem_u(…)中,是否有方法知道哪个工作线程id正在抓取该特定批次(由“idx”标识)?问这个问题的动机是我想把工作量分散到两个工人身上,构建一个单独的数据集(例如负样本)。理想情况下,这应该在一个终端完成,但它可能不会由多个进程完成?