Keras几乎没有关于keras.utils.Sequence的信息,实际上我想从keras.utils.Sequence
派生我的批处理生成器的唯一原因是我不想自己写带有线程的线程池,但是我不确定这是否是我的任务的最佳选择,这是我的问题:
__len__
应该返回什么带有样本的任何预定义“列表”。
keras.utils.Sequence
应该与fit_generator
一起使用,我对此感兴趣max_queue_size
,workers
,use_multiprocessing
,shuffle
参数大多。 最佳答案
len
批处理。 steps_per_epoch=len(generator)
或steps_per_epoch=None
。max_queue_size
:任何值,它将加载将在内存中等待直到其进入workers
:任何值,它将是将加载批处理use_multiprocessing
:我不知道这个。这对我来说不是必需的,而且我唯一的尝试是它的 buggy 足以卡住我的机器shuffle
:来自the documentation: bool 值。是否在每个纪元开始时对批次的顺序进行混洗。仅用于Sequence实例(keras.utils.Sequence)。当steps_per_epoch不为None时无效。 Sequence
相对于常规生成器的优势:使用序列,可以跟踪已获取的批次,将哪些批次发送到哪个线程进行加载,并且永远不会发生冲突,因为它基于索引。
使用生成器时,并行处理将无法跟踪已经采摘了哪些批次,因为线程之间不会互相交谈,并且除了按顺序逐批生产之外别无选择。
生成器和序列相对于循环的优势
在一个循环中,您将“等待批处理加载”,“等待模型训练”,“等待批处理加载”,“等待模型训练”。
使用
fit_generator
,批处理将在模型训练时“加载”,而这两种情况同时发生。对于非常简单的发电机,不会有太大影响。对于复杂的生成器,增强器,大图像加载器等,生成时间非常重要,并且可能会严重影响您的速度。
关于python - 关于keras.utils.Sequence的澄清,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53620163/