在深度学习中,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 size:100(每次处理的图片数)

  • Iterations per epoch = 总样本数 / batch_size = 1000 / 100 = 10 次

  • Total iterations = Iterations per epoch × Epochs = 10 × 5 = 50 次

代码示例说明

import torch
from torch.utils.data import DataLoader, TensorDataset

# 创建模拟数据集:1000张图片(用1000个数字代替)
data = torch.arange(0, 1000)  # [0, 1, 2, ..., 999]
dataset = TensorDataset(data)

# 创建数据加载器:设置batch_size=100
dataloader = DataLoader(dataset, batch_size=100, shuffle=True)

# 训练5个epoch
for epoch in range(5):
    print(f"\n=== 开始第 {epoch+1} 个epoch ===")
    
    # 每个epoch内遍历所有batch
    for batch_idx, batch_data in enumerate(dataloader):
        # 获取当前batch的数据
        images = batch_data[0]  # 当前batch的100张"图片"
        
        # 这里应该是你的训练代码:
        # 1. 正向传播
        # 2. 计算损失
        # 3. 反向传播
        # 4. 更新权重

        
        # 打印当前iteration信息
        print(f"Epoch {epoch+1} | Iteration {batch_idx+1} | 处理图片: {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_size=100
dataloader = DataLoader(dataset, batch_size=100, shuffle=True)# 训练5个epoch
for epoch in range(5):print(f"\n=== 开始第 {epoch+1} 个epoch ===")# 每个epoch内遍历所有batchfor batch_idx, batch_data in enumerate(dataloader):# 获取当前batch的数据images = batch_data[0]  # 当前batch的100张"图片"# 这里应该是你的训练代码:# 1. 正向传播# 2. 计算损失# 3. 反向传播# 4. 更新权重# 打印当前iteration信息print(f"Epoch {epoch+1} | Iteration {batch_idx+1} | 处理图片: {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 次

关键概念解析

  1. Batch(批)

    • 每次实际输入模型的数据子集

    • 代码中的 images = batch_data[0] 获取的就是一个batch

    • 大小由 batch_size=100 决定

  2. Iteration(迭代)

    • 完成一个batch训练所需的步骤

    • 每个iteration包含:

      • 从dataloader取出一个batch数据

      • 执行正向传播 → 计算损失 → 反向传播 → 更新权重

    • 代码中 for batch_idx, ... 循环的每次执行就是一个iteration

  3. Epoch(轮次)

    • 完整遍历整个数据集一次

    • 每个epoch包含多个iteration:

      • 1000样本 ÷ 100 batch_size = 10 iterations/epoch

    • 外层循环 for epoch in range(5) 控制epoch数量

为什么需要batch?

  1. 内存限制:无法一次性加载所有数据(如100万张图片)

  2. 训练效率:小批量数据更适合GPU并行计算

  3. 梯度稳定性批量梯度下降比单个样本更稳定

  4. 正则化效果:小批量带来轻微噪声,有助于防止过拟合

实际训练中的选择

Batch Size迭代次数内存占用训练稳定性
小 (8-32)较低
中 (64-256)中等中等较好
大 (512+)

初学者建议从 batch_size=64 开始尝试,这是常用基准值。你之前提到的8也是合理的,尤其当使用大模型或显存有限时

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/87255.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/87255.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RabbitMQ 高级特性之持久性

1. 简介 在 RabbitMQ 的消息发送流程中,一共有三种消息丢失的情况: 生产者给 broker 发送的消息,broker 没有收到broker 将消息丢失broker 给消费者发送消息时消息丢失 对于第一种情况,我们可以使用 RabbitMQ 提供的发布确认模…

应急响应靶机-近源OS-1-知攻善防实验室

前景需要: 小王从某安全大厂被优化掉后,来到了某私立小学当起了计算机老师。某一天上课的时候,发现鼠标在自己动弹,又发现除了某台电脑,其他电脑连不上网络。感觉肯定有学生捣乱,于是开启了应急。 1.攻击…

Linux 内存管理与缓存机制

文章目录 内存介绍buff/cache 与匿名页Swap(交换空间):内存的临时仓库 内存回收与Swap机制内存页的两种类型内核回收决策流程如何解读内存状态drop_caches 参数说明 实践操作查看内存状态查看Swap状态释放 buff/cache 缓存 内存介绍 当使用 …

【嵌入式电机控制#6】编码器原理与内部构造

一、简介 编码器是一种将直线位移和角位移数据转换为脉冲信号、二进制编码的设备。常用于测量物体运动的位置、角度或速度。 二、分类 1. 按检测分类: (1)光电式编码器 (2)磁电式编码器 2. 编码类型分类: …

FastAPI 安装使用教程

一、FastAPI 简介 FastAPI 是一个现代、快速(高性能)的 Web 框架,基于 Python 3.7 和标准类型提示构建,广泛应用于 API 服务开发。它使用 Pydantic 进行数据验证,集成自动生成 OpenAPI 和文档 UI,非常适合…

【WPF】WPF(样式)

Window.Resources 当前窗体作用域资源 TargetType“Button” 使得当前窗体的组件类型都适配此样式<Window.Resources><Style TargetType"Button"><Setter Property"Background" Value"WhiteSmoke"></Setter><Setter…

Jmeter(六):json断言元件,jmeter参数化实现

&#x1f345; 点击文末小卡片 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 json断言元件 json断言元件介绍 json断言元件与响应断言元件的功能类型&#xff0c;它只针对响应正文为json数据格 式的内容进行断言功能。 添加路径&…

python3常用模块

1 数学运算模块 math “math”模块提供了许多常用的数学函数&#xff0c;例如三角函数、四舍五入、指数、对数、平方根、总和等 import math1.1 常数 math.pi 返回圆周率的数学常数。math.e 返回指数的数学常数示例&#xff1a; print(math.pi) print(math.e)1.2 fabs(x) …

基于Pandas和FineBI的昆明职位数据分析与可视化实现(二)- 职位数据清洗与预处理

文章目录 一、数据集介绍二、缺失值处理三、重复值处理四、薪资数据格式处理五、技能格式处理六、拆分薪资列并处理异常值七、拆分工作区域列八、清洗后的数据集九、完整代码 一、数据集介绍 这份昆明职位数据集源自 Boss 直聘&#xff0c;数据量颇为丰富&#xff0c;包含 177…

工业4.0核心引擎!意法STM32F407ZET6 单片机 赋能智能PLC/网关设计

STM32F407ZET6 单片机深度解析 1. 产品定位 STM32F407ZET6 是意法半导体&#xff08;STMicroelectronics&#xff09;推出的 高性能ARM Cortex-M4单片机&#xff0c;采用 LQFP144封装&#xff0c;主打 浮点运算、丰富外设和工业级可靠性&#xff0c;广泛应用于需要复杂算法和实…

[Andrej Karpathy_2] vibe coding | 大型语言模型的1960年代 | 自主性滑块

Hugging Face的Tom Wolf分享了一段我非常喜欢的视频&#xff0c;这些孩子正在进行氛围编程。 我觉得这是一个非常治愈的视频&#xff0c;我爱这个视频。&#xff08;they grow up "knowing" they can build anything &#x1f62d;greatness) 未来是美好的 前文&…

uv包管理常用命令

uv常用命令 uv init 初始化项目 uv add 包名 添加包&#xff1b;多个包名&#xff0c;中间用空格 uv tree 包的关系 uv remove 删除所有包 uv sync 重新解析 安装工具 1、mypy 检测工具 uv tool install mypy uv tool run mypy xxx.py 使用 2、Ruff uv tool…

Nano-vLLM 源码学习

以下内容由Trae生成。我只管问和排版。 Nano-vLLM 是一个从零构建的轻量级vLLM实现项目&#xff0c;具备快速离线推理、代码可读性高和优化功能丰富等特点&#xff0c;性能表现和原版vLLM相媲美。以下是该项目各目录和文件的功能说明&#xff1a; 1. 根目录&#xff1a; benc…

MySQL 8.4 备份与恢复完全指南

本文全面解析MySQL 8.4的备份与恢复机制&#xff0c;涵盖备份类型、方法、策略及实际操作示例。 一、备份类型解析 1. 物理(原始)备份 vs 逻辑备份 特性物理备份逻辑备份原理直接复制数据库目录/文件&#xff08;如数据文件、日志&#xff09;导出逻辑结构&#xff08;CREATE…

Mac 部署Latex OCR并优化体验(打包成App并支持全局快捷键)

&#x1f341; 前言 最近阅读论文&#xff0c;在做笔记的时候总是要手动输入一些latex公式&#xff0c;非常耗时。我使用Hapigo的Latex 公式识别&#xff0c;感觉还挺好用&#xff0c;但是缺陷是只有30次免费额度&#xff0c;于是在网上搜索了一下&#xff0c;发现可以通过本地…

128K 长文本处理实战:腾讯混元 + 云函数 SCF 构建 PDF 摘要生成器

一、背景 在数字化办公时代&#xff0c;PDF 文档因其格式稳定、兼容性强等特点&#xff0c;成为知识分享与文档存储的主要载体之一。但随着文档规模的增长&#xff0c;如何快速提取关键信息成为亟待解决的问题。尤其对于 128K 字符及以上的长文本 PDF&#xff0c;传统处理方法…

Elasticsearch 排序性能提升高达 900 倍

作者&#xff1a;来自 Elastic Benjamin Trent, Mayya Sharipova, Chenhui Wang 及 Libby Lin 了解我们如何通过更快的 float / half_float 排序和 integer 排序的延迟优化来加快 Elasticsearch 排序速度。 Elasticsearch 引入了大量新功能&#xff0c;帮助你为你的使用场景构建…

Nginx重定向协议冲突解决方案:The plain HTTP request was sent to HTTPS port

问题原因 ​​服务器运行在 HTTPS 模式&#xff0c;但代码却发出了 HTTP 重定向指令&#xff0c;两套协议对不上&#xff0c;浏览器直接报错。​​ 在Java中&#xff0c;常见于response.sendRedirect()方法的使用。该方法默认生成基于HTTP的绝对URL&#xff0c;即便原始请求是…

机器学习如何让智能推荐“更懂你”,助力转化率飞跃?

机器学习如何让智能推荐“更懂你”,助力转化率飞跃? 今天咱聊聊一个电商、内容平台、社交App都离不开的“秘密武器”——智能推荐系统,以及机器学习到底如何帮它提升转化率的。 说白了,转化率就是“点进去买单”的概率。智能推荐做得好,转化率能蹭蹭上涨;做不好,用户滑…

Ruby CGI Session

Ruby CGI Session 引言 CGI&#xff08;Common Gateway Interface&#xff09;是一种网络服务器与外部应用程序&#xff08;如脚本或程序&#xff09;进行通信的协议。在Ruby语言中&#xff0c;CGI被广泛用于创建动态网页。本文将深入探讨Ruby CGI Session的相关知识&#xf…