【深度学习|学习笔记】Batch size 和 Epoch 是深度学习训练过程中的两个关键超参数,它们的设置如何影响 收敛速度、模型性能、泛化能力以及计算资源利用?
【深度学习|学习笔记】Batch size 和 Epoch 是深度学习训练过程中的两个关键超参数,它们的设置如何影响 收敛速度、模型性能、泛化能力以及计算资源利用?
·
【深度学习|学习笔记】Batch size 和 Epoch 是深度学习训练过程中的两个关键超参数,它们的设置如何影响 收敛速度、模型性能、泛化能力以及计算资源利用?
【深度学习|学习笔记】Batch size 和 Epoch 是深度学习训练过程中的两个关键超参数,它们的设置如何影响 收敛速度、模型性能、泛化能力以及计算资源利用?
文章目录
欢迎铁子们点赞、关注、收藏!
祝大家逢考必过!逢投必中!上岸上岸上岸!upupup
大多数高校硕博生毕业要求需要参加学术会议,发表EI或者SCI检索的学术论文会议论文。详细信息可扫描博文下方二维码 “
学术会议小灵通”或参考学术信息专栏:https://blog.csdn.net/2401_89898861/article/details/148877490
1. 基本概念回顾
Batch size:每次前向/反向传播所使用的样本数。
- 小 batch → 更新频繁、梯度噪声大,但泛化能力强。
- 大 batch → 更新少、训练快,梯度更稳定,但可能导致泛化下降。
Epoch:遍历完整训练集一次的过程。
- 更多 epoch → 模型学得更充分,但可能过拟合。
- 更少 epoch → 模型可能欠拟合。
二者关系:

2. 平衡的核心思路
1. 资源限制优先
- 如果显存有限:batch size 不能过大。
- 如果计算资源足够:可以尝试较大 batch,提高训练速度。
2. 泛化能力考虑
- 小 batch(如 32, 64):梯度更新更频繁,泛化通常更好。
- 大 batch(如 512, 1024):梯度更稳定,但容易陷入 sharp minima → 泛化性能差。
3. 与学习率联动
- 大 batch 通常需要 调大学习率 才能收敛。
- 常用规则:线性缩放法则

4. 经验策略
- 小数据集:小 batch,较多 epoch。
- 大数据集:中等 batch,适中 epoch。
- 迁移学习/微调:小 batch,epoch 不宜过多。
3. PyTorch 实例代码
- 下面用 MNIST 训练一个简单神经网络,展示如何平衡 batch size 和 epoch:
import torch
import torch.nn as nn
import torch.optim as optim
from torchvision import datasets, transforms
# 数据加载
transform = transforms.ToTensor()
train_dataset = datasets.MNIST('.', train=True, download=True, transform=transform)
# 可调 batch_size 和 epoch
batch_size = 64 # try 32, 128, 256
epochs = 5 # try 5, 10, 20
train_loader = torch.utils.data.DataLoader(train_dataset, batch_size=batch_size, shuffle=True)
# 简单模型
class SimpleNN(nn.Module):
def __init__(self):
super(SimpleNN, self).__init__()
self.fc1 = nn.Linear(28*28, 256)
self.relu = nn.ReLU()
self.fc2 = nn.Linear(256, 10)
def forward(self, x):
x = x.view(-1, 28*28)
x = self.relu(self.fc1(x))
return self.fc2(x)
# 初始化
model = SimpleNN()
criterion = nn.CrossEntropyLoss()
optimizer = optim.SGD(model.parameters(), lr=0.01, momentum=0.9)
# 训练
for epoch in range(epochs):
for batch_idx, (data, target) in enumerate(train_loader):
optimizer.zero_grad()
output = model(data)
loss = criterion(output, target)
loss.backward()
optimizer.step()
print(f"Epoch [{epoch+1}/{epochs}] - Loss: {loss.item():.4f}")
4. 如何选择 Batch size 和 Epoch?
常见推荐值:
- Batch size:32、64、128(小 → 泛化好;大 → 训练快)。
- Epoch:10–100(视数据集大小与模型复杂度)。
实用技巧:
- 先小后大:前期用小 batch 提高泛化,后期用大 batch 稳定收敛。
- 早停 (Early Stopping):不预设 epoch,监控验证集 loss,性能不再提升就停止。
- 学习率调度器 (LR Scheduler):配合 batch size 调整学习率。
5. 直观理解
- Batch size 太小:像走楼梯,每一步都晃动(梯度噪声大),但最终能找到比较好的方向。
- Batch size 太大:像坐电梯,稳定快速下楼,但可能停在“楼层不佳”(sharp minima)。
- Epoch 太少:模型学不够 → 欠拟合。
- Epoch 太多:学过头 → 过拟合。
✅ 总结:
- batch size 决定每次梯度估计的精细程度,epoch 决定整体学习的充分性。
- 推荐:小 batch(32–128)+ 较多 epoch(50–100),同时用 早停和学习率调度 来自动平衡。
更多推荐
所有评论(0)