Epoch 和 Batch

本文深入解析了机器学习中Batchsize与Epoch的概念,解释了它们在训练过程中的作用及如何影响权重更新,对于理解SGD优化算法至关重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天在看keras的文档的时候看到行代码:

model.fit(x_train, y_train, epochs=5, batch_size=32)

epochs和batch_size, 忽然有点迷糊,知道是两个很重要的hyper parameter, 具体指什么想不起来了,赶紧查了下,以备后用。

依然是几个重要的名词:

Batch size,Epoch

这两个参数是SGD中的超参,假定有一个training dataset, size = 10000

Epoch:

当整个training dataset 都向前通过(forward:Calculate)一次网络,然后再向后(backward: Back propagation)通过一次网络, 这叫一个Epoch。

一般training中会有不止一个Epoch,就是说training dataset会多次的通过网络,这是因为training dataset里样本数量有限,如果只有一个Epoch,也许并不能获取到满意的W(Weight),所以多次,但Epoch的值是不确定的,跟training dataset有关系。

 

Batch:

因为整个training dataset的数据量过大,如果一次让这么大的数据量通过网络然后才进行一次Weight的update,那太慢了。所以一般会把整个training dataset分成若干的batch: batch_size x iteration = training dataset.

所以batch的定义就是:一批用于training的样本,在这批样本通过网络以后Weight会进行一次更新。

### 深度学习中的EpochBatch概念及其区别 #### Epoch 的定义 在深度学习中,**epoch** 是指整个训练数据集被模型遍历一次的过程。换句话说,在一个 epoch 中,所有的训练样本都会被用来更新模型参数至少一次。通常情况下,完成多个 epoch 可以帮助模型更好地拟合数据并提高性能。 #### Batch 的定义 由于现代计算资源的限制以及优化算法的需求,我们不会一次性将所有训练数据输入到网络中进行前向传播反向传播。相反,我们会把训练数据分成若干个小批次(batches),每次只处理其中的一部分。这种分批的方式被称为 **mini-batch gradient descent** 或者简称 mini-batch 方法。因此,**batch size** 表示的是每个小批量包含多少个样本[^1]。 #### 主要区别 - **覆盖范围**: 一个 epoch 覆盖了完整的训练数据集;而一个 batch 则只是该数据集中的一小部分。 - **迭代次数**: 如果总共有 N 条记录,并且设置了大小为 B 的 batches,则在一个 epoch 内会有大约 \( \lceil N/B \rceil \) 次 iteration (即 forward-backward pass)[^2]. - **内存需求**: 使用较小的 batch sizes 减少了 GPU/TPU 上所需的显存占用量,使得更大规模的数据能够适应硬件条件下的训练过程. - **收敛速度**: 较大的 batch sizes 往往会加快每一步梯度估计的速度但由于缺乏足够的随机扰动可能导致局部最优解附近徘徊较长时间; 小一点则有助于跳出这些区域从而可能获得更好的全局泛化能力. ```python import tensorflow as tf from tensorflow.keras import datasets, layers, models (train_images, train_labels), (test_images, test_labels) = datasets.cifar10.load_data() model = models.Sequential() model.add(layers.Conv2D(32, (3, 3), activation='relu', input_shape=(32, 32, 3))) model.add(layers.MaxPooling2D((2, 2))) # Add more convolutional and dense layers... model.compile(optimizer='adam', loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True), metrics=['accuracy']) history = model.fit(train_images, train_labels, epochs=10, batch_size=64) ``` 上述代码片段展示了如何设置 `epochs` `batch_size` 参数来控制训练循环的行为。这里选择了 Adam optimizer 并指定交叉熵损失函数用于分类任务评估指标为准确率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值