在深度學習中,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
英文地址,請注明出處:http://en.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…