当训练数据是图像时,Keras model.fit() 中的“批次”是啥

Posted

技术标签:

【中文标题】当训练数据是图像时,Keras model.fit() 中的“批次”是啥【英文标题】:what is a "batch" in Keras model.fit() when training data are images当训练数据是图像时,Keras model.fit() 中的“批次”是什么 【发布时间】:2020-04-20 03:28:23 【问题描述】:

假设我有一组用于训练的图像数据,20 个输入图像和 20 个输出图像,图像大小为 512*512。首先我准备训练数据为“train_image_input”(大小 20*512*512)和“train_image_output”(大小 20*512*512),然后我在 Keras 中运行以下代码,

model.fit(train_image_input, train_image_output,epochs=3,batch_size=5)

我想确认当数据是图像时“batch”的定义,在上面的例子中,“batch_size=5”是什么意思

    一次训练5张图片(数据大小5*512*512)? 单张图像中的5列(数据大小5*512)一次进入训练?

我已经阅读了这篇文章:https://machinelearningmastery.com/difference-between-a-batch-and-an-epoch/ 当数据是图像时,下面的描述让我对样本/批次的定义感到困惑

什么是样本? 样本是单行数据。 它包含输入算法的输入和用于与预测进行比较并计算误差的输出。 训练数据集由多行数据组成,例如许多样品。样本也可以称为实例、观察、输入向量或特征向量。 现在我们知道了什么是样本,让我们定义一个批次。 什么是批处理? 批量大小是一个超参数,它定义了在更新内部模型参数之前要处理的样本数量。

另外,如果我设置“batch_size=30”,图片数量较大,代码执行过程中没有错误,所以我可能认为第二个(数据大小5*512)是正确的?

谢谢。

【问题讨论】:

在您的情况下,Batch_size 是5 images(data size 5*512*512) are taken into training at a time,因此每个时期有 4 个步骤,每个时期消耗 20 张图像。在训练的一个步骤(5 张图像)之后,权重和偏差被更新,然后在第二步中,另外 5 张图像将被用于训练,并且权重和偏差被再次更新。这个过程一直持续到它消耗了训练中的所有数据。 谢谢,顺便问一下,如果我设置“batch_size=30”,你知道什么是状态吗?我期待一个错误显示“batch_size 大于样本大小”但实际上在代码执行期间没有错误。 如果batch_size 大于样本大小,则不应出现任何错误。考虑这种情况,batch_size 为 5,样本大小为 22。在使用 batch_size 5 的四个训练步骤之后,剩下 2 个样本。我们是否抛出了这两个可能具有良好信息并有助于模型构建的样本。其实我们不会扔。我们将使用 2 个样本再进行一步训练。出于某种原因,如果你想抛出,有batch_input_shape 修复了batch_size。希望对您有所帮助。 【参考方案1】:

批量大小定义了将通过网络传播的样本数量。

例如,假设您有 1050 个训练样本,并且您希望将 batch_size 设置为 100。该算法从训练数据集中获取前 100 个样本(从第 1 个到第 100 个)并训练网络。接下来,它获取第二个 100 个样本(从第 101 个到第 200 个)并再次训练网络。我们可以继续执行此过程,直到我们通过网络传播了所有样本。最后一组样本可能会出现问题。在我们的示例中,我们使用了 1050,它不能被 100 整除而没有余数。最简单的解决方案就是获取最后的 50 个样本并训练网络。

【讨论】:

以上是关于当训练数据是图像时,Keras model.fit() 中的“批次”是啥的主要内容,如果未能解决你的问题,请参考以下文章

使用 tf.keras.Model.fit 进行训练时如何将自定义摘要添加到 tensorboard

使用tf.train时,使用tf.dataset的Keras model.fit()会失败

使用 ImageDataGenerator 时 Keras 拆分训练测试集

keras训练完模型,为啥对训练集进行evaluate和训练时的loss完全不一样?白训练了吗?

tf.keras model.fit():在相同数据上火车损失和val损失之间的巨大差异

使用Keras model.fit_generator生成器