Python 为什么我可以在tf.Model.fit()中提供batchsize

Python 为什么我可以在tf.Model.fit()中提供batchsize,python,tensorflow,Python,Tensorflow,我有点搞不清 上面写着: 批次大小:整数或无。每次渐变更新的采样数。如果未指定,批次大小将默认为32。如果您的数据是数据集、生成器或keras.utils.Sequence实例的形式,请不要指定批次大小(因为它们生成批次) 我想,当我用我的模型训练(或预测)时,我必须提供一些数据,而且无论如何,我必须批量完成 例如,如果我的神经网络的输入大小是(2),那么我可以给出: inputs = np.ones((1,2)) my_model.fit(inputs, target_output) #or

我有点搞不清

上面写着:

批次大小:整数或无。每次渐变更新的采样数。如果未指定,批次大小将默认为32。如果您的数据是数据集、生成器或keras.utils.Sequence实例的形式,请不要指定批次大小(因为它们生成批次)

我想,当我用我的模型训练(或预测)时,我必须提供一些数据,而且无论如何,我必须批量完成

例如,如果我的神经网络的输入大小是(2),那么我可以给出:

inputs = np.ones((1,2))
my_model.fit(inputs, target_output)

#or this:
inputs = np.ones((10,2))
my_model.fit(inputs, target_output)

#but never this:
inputs = np.ones((2))
my_model.fit(inputs, target_output)

我的问题:

因此,当我调用
my_model.fit()
时,如果我在调用中提供的批次已经具有定义的大小,为什么还要另外提供
batch_size

编辑:我已经考虑过了。如果
inputs
是我放入
my_model.fit()
中的数据,假设它包含1000个示例,那么我是否可以指定,在这1000个示例中,我只想使用100个(随机?)示例进行设置为
batch_size=100
的培训?如果这是真的,为什么我不事先提取一个样本,只把这个样本交给
my\u model.fit()

方便吗


Edit2:我已经知道,我需要batchsize的额外维度,如中所述。

我们使用batch size的原因之一是我们可能有一个很大的数据集,如果我们使用None,我们的内存空间,无论是在GPU还是主内存上,都无法容纳它们。
现在,如果您使用CNN模型的摘要,您将看到每个输入张量都有一个形状

(None,height,width,channel)
这意味着,根据批量大小,模型将放置相关数量的图像,而不是None,如果您有这样的矩阵,则基于此

a = tf.ones((120,120,3))
然后输入形状

(None,120,120,3)
有许多方法可以使其通过模型,在执行此操作的过程中,请在轴0上展开尺寸标注

a = tf.expand_dims(a,axis=0)
在那之后,你的形状会

print(a.shape())
(1,120,120,3)

最后,您可以在模型上对其进行cat pass或fit。

为了更好地概括学习,网络将“批量”查看您提供的样本。这与整个数据集不同。如果您总共有1000个样本,且批大小为100,则网络将对100个样本进行前向传递,然后基于这100个样本进行反向传播,然后对下100个样本进行前向传递。如果没有这一点,网络将进行前向传递,然后一次对每个样本或所有样本进行后向传播。对每个样本进行反向传播会使网络对每个样本过于敏感-您希望它基于所有样本中常见的特征和模式进行学习


因此,batchsize是调整模型学习方式的一个有价值的超参数。您可以通过增加batchsize来鼓励更多的泛化,或者通过减少批次大小来鼓励更多的专门化。当你符合模型时,你会说“这是我所有的训练数据”,然后说“一次看64个样本”

对不起,这完全不能回答我的问题。我不认为你理解我的问题。我会尽量让它更精确。哦,这是有道理的。也就是说,我对批次的工作原理有一个完全错误的理解。。谢谢你的回答!