趋近智
训练神经网络 (neural network)时,特别是处理大型数据集时,一次性处理整个数据集来计算损失并更新权重 (weight),可能耗费大量计算资源和内存。此外,每次权重更新都使用整个数据集(如同传统批次梯度下降 (gradient descent))可能会导致收敛速度减慢或停留在局部最优解。为解决此问题,训练过程通常会划分为更小、更易于管理的分步操作,采用批次和周期的思想。
一个周期表示对整个训练数据集的一次完整遍历。如果你的数据集包含10,000张图片,一个周期就是在模型恰好一次性看过并从中学习过这10,000张图片之后完成。
训练深度学习 (deep learning)模型通常需要多个周期。为什么呢?因为仅一次遍历很少能让模型的权重 (weight)收敛到最佳值。网络需要多次查看数据,以便高效地掌握数据中蕴含的规律。这就像备考一样:你不会只看一遍课本;你会多次复习材料(多个周期)以巩固理解。
周期数是你在训练开始前设定的一个超参数 (parameter) (hyperparameter)。选择合适的数量很重要:
在一个周期内,我们不一次性处理整个数据集,而是将数据集划分为更小的子集,称之为批次。批次大小决定了每个批次中包含多少个训练样本。
在每个周期中,训练数据通常会被打乱顺序,然后分成这些批次。模型一次处理一个批次:
此过程在周期内对所有批次重复进行。模型每次处理一个批次并更新其权重时,称为一次迭代或步。
例如,如果你有一个包含2,000个样本的数据集,并将批次大小设定为100,那么一个周期将包含:
在一个周期内,模型的权重将更新20次。
一张图解,展示了在单个周期内,完整的训练数据集如何被划分为批次。每个批次被顺序处理,从而进行一次权重更新(迭代)。
使用批次(通常称为小批次梯度下降 (gradient descent))相较于一次性处理整个数据集(批次梯度下降)或一次处理一个样本(随机梯度下降,或SGD,尽管实践中SGD常指小批次SGD)具有多项优势:
批次大小是另一个重要的超参数 (parameter) (hyperparameter)。常见的批次大小是2的幂(例如,32、64、128、256),这是因为硬件内存对齐 (alignment)优化所致,但其他值也可能有效。选择时需要权衡利弊:
在实际操作中,批次大小设为32或64通常是一个好的起始选择。你可以在超参数调整过程中尝试不同的尺寸。
当你调用Keras的fit()方法时,你会指定这些参数 (parameter):
# 假设 'model' 已编译,并且 'x_train'、'y_train' 是 NumPy 数组
history = model.fit(
x_train,
y_train,
batch_size=32, # 每次梯度更新的样本数量
epochs=10, # 遍历整个数据集的次数
validation_data=(x_val, y_val) # 用于在每个周期结束时评估损失和指标的数据
)
此处,模型将训练10个周期。在每个周期中,它将以32个样本为一批次处理x_train数据,并在每个批次处理后更新权重 (weight)。每个周期的迭代次数将是len(x_train) / 32。
理解批次和周期对于控制训练过程非常重要。它们决定了模型如何随时间从数据中学习,影响着训练的稳定性、速度、内存使用,并最终影响模型的泛化表现。
这部分内容有帮助吗?
model.fit(): Train a model with given data, Keras team, 2024 (Keras) - Keras fit 方法的官方文档,详细说明了 batch_size 和 epochs 等参数及其用法。© 2026 ApX Machine LearningAI伦理与透明度•