在深度学习中,batch、epoch 和 iteration 的关系
用一个实际例子和简单代码来清晰解释 batch、epoch 和 iteration 的关系------------------------------------------------------------------------------------假设场景你有一个数据集1000 张猫狗图片你设置 batch_size 100每次处理 100 张图片你计划训练 5 个 epoch概念关系图解1个Epoch 完整遍历整个数据集1次 │ ├──Iteration 1: 处理第1-100张图片 (batch 1) ├──Iteration 2: 处理第101-200张图片 (batch 2) ├──...└──Iteration 10: 处理第901-1000张图片 (batch 10)具体计算总样本数1000 张图片Batch size100每次处理的图片数Iterations per epoch 总样本数 / batch_size 1000 / 100 10 次Total iterations Iterations per epoch × Epochs 10 × 5 50 次代码示例说明import torchfrom torch.utils.data import DataLoader, TensorDataset# 创建模拟数据集1000张图片用1000个数字代替data torch.arange(0, 1000) # [0, 1, 2, ..., 999]dataset TensorDataset(data)# 创建数据加载器设置batch_size100dataloader DataLoader(dataset,batch_size100, shuffleTrue)# 训练5个epochforepochin range(5):print(f\n 开始第 {epoch1} 个epoch )# 每个epoch内遍历所有batchfor batch_idx, batch_data in enumerate(dataloader):# 获取当前batch的数据images batch_data[0]# 当前batch的100张图片# 这里应该是你的训练代码# 1. 正向传播# 2. 计算损失# 3. 反向传播# 4. 更新权重# 打印当前iteration信息print(fEpoch {epoch1} | Iteration {batch_idx1} | 处理图片: {images[0].item()}到{images[-1].item()})print(\n训练完成)print(f总Iteration次数: {5 * len(dataloader)} 次)import torch from torch.utils.data import DataLoader, TensorDataset # 创建模拟数据集1000张图片用1000个数字代替 data torch.arange(0, 1000) # [0, 1, 2, ..., 999] dataset TensorDataset(data) # 创建数据加载器设置batch_size100 dataloader DataLoader(dataset, batch_size100, shuffleTrue) # 训练5个epoch for epoch in range(5): print(f\n 开始第 {epoch1} 个epoch ) # 每个epoch内遍历所有batch for batch_idx, batch_data in enumerate(dataloader): # 获取当前batch的数据 images batch_data[0] # 当前batch的100张图片 # 这里应该是你的训练代码 # 1. 正向传播 # 2. 计算损失 # 3. 反向传播 # 4. 更新权重 # 打印当前iteration信息 print(fEpoch {epoch1} | Iteration {batch_idx1} | 处理图片: {images[0].item()}到{images[-1].item()}) print(\n训练完成) print(f总Iteration次数: {5 * len(dataloader)} 次)输出示例 开始第 1 个epoch Epoch 1 | Iteration 1 | 处理图片: 12到980 Epoch 1 | Iteration 2 | 处理图片: 88到799 ... Epoch 1 | Iteration 10 | 处理图片: 36到995 开始第 2 个epoch Epoch 2 | Iteration 1 | 处理图片: 44到932 ... (共5个epoch每个epoch 10个iteration) 训练完成 总Iteration次数: 50 次关键概念解析Batch批每次实际输入模型的数据子集代码中的images batch_data[0]获取的就是一个batch大小由batch_size100决定Iteration迭代完成一个batch训练所需的步骤每个iteration包含从dataloader取出一个batch数据执行正向传播 → 计算损失 → 反向传播 → 更新权重代码中for batch_idx, ...循环的每次执行就是一个iterationEpoch轮次完整遍历整个数据集一次每个epoch包含多个iteration1000样本 ÷ 100 batch_size 10 iterations/epoch外层循环for epoch in range(5)控制epoch数量为什么需要batch内存限制无法一次性加载所有数据如100万张图片训练效率小批量数据更适合GPU并行计算梯度稳定性批量梯度下降比单个样本更稳定正则化效果小批量带来轻微噪声有助于防止过拟合实际训练中的选择Batch Size迭代次数内存占用训练稳定性小 (8-32)多低较低中 (64-256)中等中等较好大 (512)少高高初学者建议从 batch_size64 开始尝试这是常用基准值。8也是合理的尤其当使用大模型或显存有限时。