如果数据集的大小不是批处理大小的倍数,在Keras中会发生什么?

时间:2020-01-19 16:01:56

标签: python keras deep-learning

当数据集大小不是批处理大小的倍数时,在Keras中会发生什么? 这是否意味着每个时期的最后一步将具有较小的批次?确认发生什么情况的代码位置在哪里?

问题与此suggested post不同,因为后者回答了一个事实,即您可以训练何时纪元不是批处理大小的倍数,但是不能知道发生什么情况以及代码在哪里?可以加深了解。

2 个答案:

答案 0 :(得分:3)

这个问题的答案实际上很简单而且很直观。解决的办法是最后一批较小。我将举一个例子来说明这个想法:假设您有一个包含100个样本的数据集,并且使用等于16的批处理大小。那么您有6个大小为16的批处理,这意味着您将消耗16 * 6 = 96个样本,您还有4个剩余样本,在这个时期还没有看到,因此您只创建了4个样本作为最后一批

答案 1 :(得分:2)

首先将您所指的称为dataset size而不是epoch size。当数据集大小不能被批量大小整除时,有两种方法来处理余数。

  • 创建少量数据(大多数情况下,这是最佳选择)
  • 删除其余数据(当出于某种原因(例如特殊的损失函数)需要修复批次尺寸时,您只能处理整批数据)

例如,在tf.data API中,您可以传递参数drop_remainder(布尔值)来决定使用tf.data.Dataset.batch()时需要对余数进行什么处理。