使用 PyTorch 的 torchvision 庫加載 CIFAR-10 數據集

CIFAR-10是一個更接近普適物體的彩色圖像數據集。CIFAR-10 是由Hinton 的學生Alex Krizhevsky 和Ilya Sutskever 整理的一個用于識別普適物體的小型數據集。一共包含10 個類別的RGB 彩色圖片:飛機( airplane )、汽車( automobile )、鳥類( bird )、貓( cat )、鹿( deer )、狗( dog )、蛙類( frog )、馬( horse )、船( ship )和卡車( truck )。
每個圖片的尺寸為32 × 32 ,每個類別有6000個圖像,數據集中一共有50000 張訓練圖片和10000 張測試圖片。

import torchvision
import torchvision.transforms as transforms# 定義數據預處理
transform = transforms.Compose([transforms.ToTensor(),transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))
])# 自動下載訓練集
trainset = torchvision.datasets.CIFAR10(root='./data',  # 數據保存路徑train=True,download=True,  # 設置為True自動下載transform=transform
)# 自動下載測試集
testset = torchvision.datasets.CIFAR10(root='./data',train=False,download=True,transform=transform
)

1. 導入必要的庫

import torchvision

import torchvision.transforms as transforms

  1. torchvision:PyTorch 的視覺庫,提供常用數據集、模型架構和圖像轉換工具。
  2. transforms:用于圖像預處理的模塊,如縮放、歸一化等。

2. 定義數據預處理流程

transform = transforms.Compose([

??? transforms.ToTensor(),

??? transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))

])

  1. transforms.Compose:將多個預處理操作按順序組合。
  2. transforms.ToTensor()
    1. 將 PIL 圖像或 NumPy 數組(H×W×C,范圍 0-255)轉換為 PyTorch 張量(C×H×W,范圍 0.0-0)。
  3. transforms.Normalize(mean, std)
    1. 對每個通道進行歸一化:output = (input - mean) / std
    2. 這里mean=(0.5, 0.5, 0.5)std=(0.5, 0.5, 0.5)將像素值從[0.0, 1.0]映射到[-1.0, 1.0](例如,0.0→-1.0,1.0→1.0)。

3. 下載并加載訓練集

trainset = torchvision.datasets.CIFAR10(

??? root='./data',? # 數據保存路徑

??? train=True,???? # True表示訓練集(50,000張)

??? download=True,? # 自動下載(如果數據不存在)

??? transform=transform? # 應用預處理

)

  1. torchvision.datasets.CIFAR10:CIFAR-10 數據集類,包含 10 個類別(如飛機、汽車、鳥類等)的 60,000 張 32×32 彩色圖像。
  2. 參數說明
    1. root='./data':數據將下載到當前目錄的data文件夾中。
    2. train=True:加載訓練集(50,000 張);若為False則加載測試集(10,000 張)。
    3. download=True:若數據不存在,自動從互聯網下載(約 170MB)。
    4. transform=transform:對圖像應用之前定義的預處理(轉為張量并歸一化)。

4. 下載并加載測試集

testset = torchvision.datasets.CIFAR10(

??? root='./data',? # 與訓練集路徑一致

??? train=False,??? # 加載測試集

??? download=True,? # 自動下載

??? transform=transform? # 應用相同的預處理

)

  1. 測試集與訓練集結構相同,但用于模型評估,不參與訓練。

5. 數據驗證與使用

下載完成后,數據將存儲在./data/cifar-10-batches-py目錄中。你可以:

  1. 查看數據集大小

print(len(trainset))? # 輸出: 50000

print(len(testset))?? # 輸出: 10000

  1. 訪問單個樣本

image, label = trainset[0]? # 獲取第一張圖像及其標簽

print(image.shape)? # 輸出: (3, 32, 32)

print(label)??????? # 輸出: 6(對應類別索引)

  1. 使用數據加載器批量處理數據

from torch.utils.data import DataLoader

trainloader = DataLoader(trainset, batch_size=32, shuffle=True)

testloader = DataLoader(testset, batch_size=32, shuffle=False)

注意事項

  1. 下載路徑
    1. 若指定路徑(如./data)已存在 CIFAR-10 數據,download=True不會重復下載。
    2. 若路徑錯誤或無寫入權限,會拋出異常(如PermissionError)。
  2. 網絡問題
    1. 首次下載需聯網,可能需要幾分鐘。若下載中斷,可刪除./data目錄后重新運行。
  3. 數據預處理
    1. 歸一化參數meanstd通常根據數據集的統計特性設定。對于 CIFAR-10,常用(0.5, 0.5, 0.5)進行簡單歸一化。
    2. 若需要更精確的歸一化,可計算數據集的真實均值和標準差(如mean=[0.4914, 0.4822, 0.4465]std=[0.2470, 0.2435, 0.2616])。

擴展應用

加載數據后,可用于訓練 CNN 模型(如之前創建的SimpleCNN):

# 假設model已定義

from torch import nn, optim

criterion = nn.CrossEntropyLoss()

optimizer = optim.SGD(model.parameters(), lr=0.001, momentum=0.9)

# 訓練循環

for epoch in range(5):? # 訓練5個輪次

??? for inputs, labels in trainloader:

??????? optimizer.zero_grad()

??????? outputs = model(inputs)

??????? loss = criterion(outputs, labels)

??????? loss.backward()

??????? optimizer.step()

??? print(f"Epoch {epoch+1} completed")

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/90245.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/90245.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/90245.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

藍橋杯51單片機

這是我備考省賽的時候總結的錯誤點和創新點那個時候是用來提醒自己的,現在分享給你們看^_^一考點二注意點記得初始化Y4,Y5,Y6,Y7&…

【2025/07/23】GitHub 今日熱門項目

GitHub 今日熱門項目 🚀 每日精選優質開源項目 | 發現優質開源項目,跟上技術發展趨勢 📋 報告概覽 📊 統計項📈 數值📝 說明📅 報告日期2025-07-23 (周三)GitHub Trending 每日快照&#x1f55…

【生成式AI導論 2024】第12講:淺談檢定大型語言模型能力的各種方式 學習記錄

跟標準答案做對比看是否正確 選擇題是不是正確 MMLU massive multitask Language Understanding MT-bench 使用語言模型來評分 還有其他任務的對比,也有特別刁鉆的問題 閱讀長文的能力 grep kamradt 大海撈針

嵌入式 Qt 開發:實現開機 Logo 和無操作自動鎖屏

在嵌入式設備開發中,為設備添加開機 Logo 和無操作自動鎖屏功能是提升用戶體驗的重要環節。本文將詳細介紹如何在 Qt 嵌入式項目中實現這兩個功能。我們將使用 Qt 5/6 和 Linux 環境,確保代碼的可移植性和通用性。項目結構為了實現這兩個功能&#xff0c…

【AI智能體】Dify 開發與集成MCP服務實戰操作詳解

目錄 一、前言 二、Dify 介紹 2.1 Dify是什么 2.2 MCP 介紹 2.2.1 什么是MCP 2.2.2 MCP核心特性 2.3 Dify中開發與使用MCP介紹 2.3.1 MCP Server開發與使用 2.4 dify 開發MCP Server優勢 三、Dify開發與集成MCP操作過程 3.1 Dify MCP 插件說明 3.2 安裝mcp-server插…

django filter按兩個屬性 去重

在Django中,如果你想基于兩個屬性去重,可以使用distinct()方法并結合annotate()和Count()來實現。這種方法通常用在查詢集中,尤其是在你需要統計基于某些字段的唯一值時。 示例 假設你有一個Person模型,它有兩個字段:f…

PHP高級進階:突破編程邊界,開啟技術新征程

目錄一、PHP 高級函數的深度剖析1.1 回調函數的高級應用1.2 遞歸函數的優化技巧二、面向對象編程的深化2.1 抽象類與接口的實際運用2.2 設計模式在 PHP 中的實現三、PHP 與數據庫交互的高級技術3.1 數據庫連接池的使用3.2 事務處理與數據一致性四、性能優化與調試4.1 代碼性能分…

cx_Freeze python 打包詳解

優點:有時比 PyInstaller 更好處理外部 .pyd做法:安裝 cx_Freezeshpip install cx_Freeze新建 setup.py:pythonfrom cx_Freeze import setup, Executablebuild_exe_options {"packages": ["apscheduler.triggers.interval&qu…

Java字符串不可變性:從安全哲學到性能藝術的完美平衡

目錄 引言 一、什么是String的不可變性? 二、解剖String的“防彈衣”:底層實現機制 1. final的三重防御體系 2. 方法實現的精妙設計 3. 構造函數的防御性編程 三、為什么String必須不可變?設計哲學的五大支柱 1. 字符串常量池&#x…

多服務器批量發布軟件

當需要同時發布程序到多個服務器的時候,常規是通過jekins了但是喜歡了手動檔,直接寫了個簡單批量發布軟件,程序編譯發布后,直接加載配置,選擇對應的服務器,直接電機發布即可,基本可以媲美jekins…

基于.Net Core開源的庫存訂單管理系統

今天給大家推薦一套開源的庫存訂單管理系統。 項目簡介 該項目是基于Asp.Net Core Mvc開發的庫存訂單管理系統,主要實現模塊有倉庫、產品、供應商、客戶、采購訂單、銷售訂單、發貨、收貨等等,該項目是單體架構,技術棧也不是最新的&#xf…

Django學習之旅--第13課:Django模型關系進階與查詢優化實戰

在Django開發中,模型關系設計與查詢性能直接決定了系統的擴展性和效率。當業務場景從簡單的數據存儲升級為復雜的關聯分析(如訂單統計、用戶行為分析)時,基礎的模型關系和查詢方式已無法滿足需求。本節課將深入講解模型關系的高級…

簡單理解現代Web應用架構:從簡單到企業級

在開發Web應用程序時,理解如何構建一個既安全又高效的系統至關重要。本文將通過介紹從簡單的三層架構到復雜的企業級架構的演變過程,幫助您更好地理解這些概念。1. 基礎架構:React Node.js MySQL前端(React)&#xf…

修改 Lucide-React 圖標樣式的方法

修改 Lucide-React 圖標樣式的方法 使用 lucide-react 時&#xff0c;你可以通過多種方式修改圖標的樣式。以下是幾種常用的方法&#xff1a; 1. 通過 className 屬性 import { Home } from lucide-react;function MyComponent() {return <Home className"text-blue-50…

神經架構搜索革命:從動態搜索到高性能LLM的蛻變之路

本文將揭示如何通過神經架構搜索技術&#xff08;NAS&#xff09;自動發現最優網絡結構&#xff0c;并將搜索結果轉化為新一代高性能大型語言模型的核心技術。我們的實驗證明&#xff0c;該方法在同等計算資源下可實現80%的性能飛躍&#xff01;第一部分&#xff1a;神經架構搜…

【LeetCode 熱題 100】78. 子集——(解法三)位運算

Problem: 78. 子集 題目&#xff1a;給你一個整數數組 nums &#xff0c;數組中的元素 互不相同 。返回該數組所有可能的子集&#xff08;冪集&#xff09;。 解集 不能 包含重復的子集。你可以按 任意順序 返回解集。 文章目錄整體思路完整代碼時空復雜度時間復雜度&#xff1…

XCKU035?1SFVA784C Xilinx FPGA KintexUltraScale AMD

XCKU035?1SFVA784C 屬于 Xilinx Kintex UltraScale 系列&#xff0c;基于領先的 20?nm FinFET 技術制程&#xff0c;旨在為中高端應用提供卓越的性能與功耗平衡。該器件采用 784?ball Fine?pitch BGA&#xff08;SFVA784&#xff09;封裝&#xff0c;速度等級?1&#xff0…

Encore.ts:下一代高性能 TypeScript 后端框架的崛起

在 Node.js 生態系統中&#xff0c;后端框架的選擇直接影響 API 的性能、開發體驗和可維護性。近年來&#xff0c;Elysia.js、Hono、Fastify 等框架憑借各自的優化策略嶄露頭角&#xff0c;而 Encore.ts 則憑借 Rust TypeScript 混合架構&#xff0c;在性能上實現了質的飛躍。…

【IP地址】IP歸屬地查詢驅動企業實時戰略調整

動態市場感知與資源調度優化? IP歸屬地的實時分析為企業提供了市場需求的動態變化圖。 基于實時數據處理框架&#xff0c;企業可將IP歸屬地數據與用戶訪問量、轉化率等指標關聯計算&#xff0c;生成區域市場活躍度熱力圖。 當某區域IP訪問量在1小時內激增300%且停留時長提升至…

[Bug | Cursor] import error: No module named ‘data‘

import error: No module named ‘data’ Folder Structure root folder data folder dataloader.py src folder train.py <- where we try to import the dataloader.pyFailed Script ROOT_DIR Path(__file__).parent.parent os.chdir(ROOT_DIR) print(f"Using root…