Keras几乎没有关于keras.utils.Sequence的信息,实际上我想从keras.utils.Sequence
派生我的批处理生成器的唯一原因是我不想自己写带有队列的线程池,但是我我不确定这是否是完成任务的最佳选择,这是我的问题:
__len__
应该返回什么
带有样本的任何预定义“列表”。 keras.utils.Sequence
应该与fit_generator
一起使用,我对此感兴趣
max_queue_size
,workers
,use_multiprocessing
,shuffle
参数。答案 0 :(得分:2)
len
个批处理。 steps_per_epoch=len(generator)
或steps_per_epoch=None
。
max_queue_size
:任何值,它将加载在内存中等待直到轮到模型的批次workers
:任何值,它将是将要批量加载的并行“线程”数(如果名称不正确,请原谅)use_multiprocessing
:我不知道这个。对我而言,这不是必须的,而且我唯一的尝试是它的越野车足以冻结我的机器shuffle
:来自the documentation:布尔值。是否在每个纪元开始时对批次顺序进行洗牌。仅用于Sequence实例(keras.utils.Sequence)。当steps_per_epoch不为None时无效。 Sequence
在常规生成器上的优势:
使用序列,可以跟踪已获取的批次,将哪些批次发送到哪个线程进行加载,并且永远不会发生冲突,因为它基于索引。
使用生成器,并行处理将无法跟踪已经采摘了哪些批次,因为线程之间不会互相交谈,除了顺次逐批生产之外,没有其他选择。
生成器和序列在循环中的优势
在一个循环中,您将“等待批处理加载”,“等待模型培训”,“等待批处理加载”,“等待模型培训”。
使用fit_generator
,将在模型训练期间“批量”加载批处理,同时使这两种情况同时发生。
对于非常简单的生成器,不会有太大影响。对于复杂的发电机,增强器,大图像加载器等,生成时间非常重要,并且可能严重影响您的速度。