我如何在 keras 中使用批量大小?

问题描述

早上好!

我只是想澄清一下 - model.fit 中的 batch_size 参数是声明了有多少样本进入,还是一次进入的样本数量 x/batch_size,其中总共有 x 个样本?

也就是说,假设我们有 20,000 个样本,我们的批次大小为 100。这意味着一次传入 200 个样本(即 100 个批次),还是 100 个样本?

我问是因为 https://deeplizard.com/learn/video/Skc8nqJirJg 说“如果我们一次将整个训练集传递给模型 (batch_size=1),那么我们刚才计算损失的过程将在每个 epoch 结束时发生在训练期间”,暗示它是一批。然而,batch_size 似乎根据它的名字有什么不同,所以我想澄清一下。

谢谢!

注意:还有一个类似的问题,但没有人回答 - How BatchSize in Keras works ? LSTM-WithState-Time Series

补充一点:这些样本是如何选择的?

解决方法

来自 TensorFlow documentation

batch_size:整数或无。每次梯度更新的样本数。如果 未指定,batch_size 将默认为 32。不要指定 如果您的数据采用数据集、生成器或 keras.utils.Sequence 实例(因为它们生成批次)。

所以它是梯度更新之前使用的样本数。如果 batch_size 等于 1,那么每个样本都会有一个梯度更新(因此,每个 epoch 的 num_samples 次)

例如,对于您引用的示例:如果我们有 20,000 个样本并且我们的批次大小为 100,则一次通过 100 个样本。

补充一点:这些样本是如何选择的?

这取决于 fit 方法的 shuffle 参数是否为 True。如果是,则随机抽取它们,直到选择了所有样本(纪元结束)。如果不是,则按顺序取它们