day38_2025-08-12

一、 圖像數據的介紹
1.1 灰度圖像
從這里開始我們進入到了圖像數據相關的部分,也是默認你有之前復試班計算機視覺相關的知識,但是一些基礎的概念我仍然會提。

昨天我們介紹了minist這個經典的手寫數據集,作為圖像數據,相較于結構化數據(表格數據)他的特點在于他每個樣本的的形狀并不是(特征數,),而是(寬,高,通道數)

# 先繼續之前的代碼
import torch
import torch.nn as nn
import torch.optim as optim
from torch.utils.data import DataLoader , Dataset # DataLoader 是 PyTorch 中用于加載數據的工具
from torchvision import datasets, transforms # torchvision 是一個用于計算機視覺的庫,datasets 和 transforms 是其中的模塊
import matplotlib.pyplot as plt
# 設置隨機種子,確保結果可復現
torch.manual_seed(42)# 1. 數據預處理,該寫法非常類似于管道pipeline
# transforms 模塊提供了一系列常用的圖像預處理操作# 先歸一化,再標準化
transform = transforms.Compose([transforms.ToTensor(),  # 轉換為張量并歸一化到[0,1]transforms.Normalize((0.1307,), (0.3081,))  # MNIST數據集的均值和標準差,這個值很出名,所以直接使用
])
import matplotlib.pyplot as plt# 2. 加載MNIST數據集,如果沒有會自動下載
train_dataset = datasets.MNIST(root='./data',train=True,download=True,transform=transform
)test_dataset = datasets.MNIST(root='./data',train=False,transform=transform
)
# 隨機選擇一張圖片,可以重復運行,每次都會隨機選擇
sample_idx = torch.randint(0, len(train_dataset), size=(1,)).item() # 隨機選擇一張圖片的索引
# len(train_dataset) 表示訓練集的圖片數量;size=(1,)表示返回一個索引;torch.randint() 函數用于生成一個指定范圍內的隨機數,item() 方法將張量轉換為 Python 數字
image, label = train_dataset[sample_idx] # 獲取圖片和標簽
# 可視化原始圖像(需要反歸一化)
def imshow(img):img = img * 0.3081 + 0.1307  # 反標準化npimg = img.numpy()plt.imshow(npimg[0], cmap='gray') # 顯示灰度圖像plt.show()print(f"Label: {label}")
imshow(image)


# 打印一張彩色圖像,用cifar-10數據集
import torch
import torchvision
import torchvision.transforms as transforms
import matplotlib.pyplot as plt
import numpy as np# 設置隨機種子確保結果可復現
torch.manual_seed(42)
# 定義數據預處理步驟
transform = transforms.Compose([transforms.ToTensor(),  # 轉換為張量并歸一化到[0,1]transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))  # 標準化處理
])# 加載CIFAR-10訓練集
trainset = torchvision.datasets.CIFAR10(root='./data',train=True,download=True,transform=transform
)# 創建數據加載器
trainloader = torch.utils.data.DataLoader(trainset,batch_size=4,shuffle=True
)# CIFAR-10的10個類別
classes = ('plane', 'car', 'bird', 'cat', 'deer', 'dog', 'frog', 'horse', 'ship', 'truck')# 隨機選擇一張圖片
sample_idx = torch.randint(0, len(trainset), size=(1,)).item()
image, label = trainset[sample_idx]# 打印圖片形狀
print(f"圖像形狀: {image.shape}")  # 輸出: torch.Size([3, 32, 32])
print(f"圖像類別: {classes[label]}")# 定義圖像顯示函數(適用于CIFAR-10彩色圖像)
def imshow(img):img = img / 2 + 0.5  # 反標準化處理,將圖像范圍從[-1,1]轉回[0,1]npimg = img.numpy()plt.imshow(np.transpose(npimg, (1, 2, 0)))  # 調整維度順序:(通道,高,寬) → (高,寬,通道)plt.axis('off')  # 關閉坐標軸顯示plt.show()# 顯示圖像
imshow(image)


二、 圖像相關的神經網絡的定義
考慮課程內容的推進,今日的內容只提定義,不涉及訓練和測試過程

2.1 黑白圖像模型的定義

# 先歸一化,再標準化
transform = transforms.Compose([transforms.ToTensor(),  # 轉換為張量并歸一化到[0,1]transforms.Normalize((0.1307,), (0.3081,))  # MNIST數據集的均值和標準差,這個值很出名,所以直接使用
])
import matplotlib.pyplot as plt# 2. 加載MNIST數據集,如果沒有會自動下載
train_dataset = datasets.MNIST(root='./data',train=True,download=True,transform=transform
)test_dataset = datasets.MNIST(root='./data',train=False,transform=transform
)
# 定義兩層MLP神經網絡
class MLP(nn.Module):def __init__(self):super(MLP, self).__init__()self.flatten = nn.Flatten()  # 將28x28的圖像展平為784維向量self.layer1 = nn.Linear(784, 128)  # 第一層:784個輸入,128個神經元self.relu = nn.ReLU()  # 激活函數self.layer2 = nn.Linear(128, 10)  # 第二層:128個輸入,10個輸出(對應10個數字類別)def forward(self, x):x = self.flatten(x)  # 展平圖像x = self.layer1(x)   # 第一層線性變換x = self.relu(x)     # 應用ReLU激活函數x = self.layer2(x)   # 第二層線性變換,輸出logitsreturn x# 初始化模型
model = MLP()device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model = model.to(device)  # 將模型移至GPU(如果可用)from torchsummary import summary  # 導入torchsummary庫
print("\n模型結構信息:")
summary(model, input_size=(1, 28, 28))  # 輸入尺寸為MNIST圖像尺寸



2.2 彩色圖像模型的定義

class MLP(nn.Module):def __init__(self, input_size=3072, hidden_size=128, num_classes=10):super(MLP, self).__init__()# 展平層:將3×32×32的彩色圖像轉為一維向量# 輸入尺寸計算:3通道 × 32高 × 32寬 = 3072self.flatten = nn.Flatten()# 全連接層self.fc1 = nn.Linear(input_size, hidden_size)  # 第一層self.relu = nn.ReLU()self.fc2 = nn.Linear(hidden_size, num_classes)  # 輸出層def forward(self, x):x = self.flatten(x)  # 展平:[batch, 3, 32, 32] → [batch, 3072]x = self.fc1(x)      # 線性變換:[batch, 3072] → [batch, 128]x = self.relu(x)     # 激活函數x = self.fc2(x)      # 輸出層:[batch, 128] → [batch, 10]return x# 初始化模型
model = MLP()device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model = model.to(device)  # 將模型移至GPU(如果可用)from torchsummary import summary  # 導入torchsummary庫
print("\n模型結構信息:")
summary(model, input_size=(3, 32, 32))  # CIFAR-10 彩色圖像(3×32×32)



from torch.utils.data import DataLoader# 定義訓練集的數據加載器,并指定batch_size
train_loader = DataLoader(dataset=train_dataset,  # 加載的數據集batch_size=64,          # 每次加載64張圖像shuffle=True            # 訓練時打亂數據順序
)# 定義測試集的數據加載器(通常batch_size更大,減少測試時間)
test_loader = DataLoader(dataset=test_dataset,batch_size=1000,shuffle=False
)





@浙大疏錦行

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

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

相關文章

Kubernetes1.28-單Master集群部署

一、 服務器環境及初始化 1、架構分析 集群角色主機名操作系統IP地址masterk8s-masterOpenEuler24.03192.168.166.128nodek8s-node1OpenEuler24.03192.168.166.129nodek8s-node2OpenEuler24.03192.168.166.130 2、初始化 所有節點都需要初始化! 2.1、清空Iptal…

使用pyqt5實現可勾選的測試用例界面

目錄 界面 代碼 python有哪些自動化測試的庫和html的報告的庫可以和這個軟件結合使用的 **一、自動化測試核心庫** **二、HTML報告生成庫** **三、其他實用工具** **與您的工具結合建議** 參考 界面 代碼 import sys import time import random from PyQt5.QtWidgets import (…

C語言變量的聲明和定義有什么區別?

定義:定義:為變量分配地址和存儲空間聲明:不分配地址和存儲空間一個變量可以在多個地方聲明,但是只在一個地方定義。加入extern修飾的是變量的聲明,說明此變量將在文件或在文件后面部分定義。1.變量聲明作用&#xff1…

imx6ull-驅動開發篇20——linux互斥體實驗

目錄 實驗程序編寫 修改設備樹文件 LED 驅動修改 mutex.c 測試mutexApp.c Makefile 文件 運行測試 在之前的文章里,我們學習了:驅動開發篇16——信號量與互斥體。 本講實驗里,我們來使用互斥體mutex實現 LED 燈互斥訪問的功能&#x…

[4.2-2] NCCL新版本的register如何實現的?

文章目錄1->2->31. ncclRegisterP2pIpcBuffer2. ncclIpcLocalRegisterBuffer(..., 1, 0,...)3. ipcRegisterBuffer(..., regRecord,..., isLegacyIpc)4. p2pProxyRegister()1->2->3 1. ncclRegisterP2pIpcBuffer 在enqueue.cc內的調用是: NCCLCHECK(…

在idea中git切換分支,但是我的文件沒add,沒commit

這是一個很悲傷的故事,我朋友一個下午寫了4個小時的代碼,差不多10多個類,都在切換分支的時候。IDEA發現有沖突,然后就要resolve conflict,發現自己不知道怎么操作,就點了abort & rollback。然后所有代碼…

GPFS api

一、核心命令行 API(mm 命令集) GPFS 最基礎且常用的接口是命令行工具集(以mm為前綴),用于文件系統的創建、配置、管理和監控。這些命令可直接在終端執行,也可通過腳本(如 Shell、Python&#…

虛擬機一站式部署Claude Code 可視化UI界面

前言 最近,強大的 AI 編碼助手 Claude Code 在開發者社區中迅速走紅,憑借其出色的代碼生成和理解能力贏得了廣泛贊譽。然而,其純粹基于命令行的交互方式,對于許多習慣了圖形化界面的開發者,尤其是新手而言&#xff0c…

網站IP被劫持?三步自建防護盾

一、劫持檢測實戰(Python腳本) import requests import socket import ssldef check_hijacking(domain):try:# 獲取真實DNS解析real_ip socket.gethostbyname(domain)# 本地發起請求驗證response requests.get(f"https://{domain}", timeout…

SQL Server從入門到項目實踐(超值版)讀書筆記 23

第三篇 核心應用篇在本章中,將通過案例示范學習SQL Server數據庫的一些核心應用。例如,SQL Server視圖的使用、游標的應用、存儲過程的應用、索引的應用、觸發器的應用、SQL Server事務與鎖的應用等。學完本篇,讀者將對SQL Server數據庫的管理…

功能測試中常見的面試題-一

一、基礎概念與理論題什么是軟件測試?它的目的是什么?回答: 軟件測試是通過人工或自動化手段,運行或評估軟件系統,以驗證它是否滿足規定的需求、識別實際結果與預期結果之間的差異,并評估軟件產品質量的過程…

LINUX88 變量:命令定義;普通數組定義(復);declare -i /-x

問題 [codesamba ~]$ array3(ls axel-2.4) [codesamba ~]$ echo $array3 API [codesamba ~]$ ls axel-2.4 API CHANGES conn.o gui README tcp.o axel conf.c COPYING http.c ru.mo text.c axel.1 …

數字IC后端PPA優化| Timing一致性調整方法和Module Region規劃方法

Q1:直播課經常講到一致性,這個一致性的話一般是指place,CTS和PT的derating time,uncertainty和transition嗎,我大概知道innovus的uncertainty設置要比PT里面高一點,但具體設計時這幾部分的大小應該是一個什么樣的關系或…

電子電氣架構 --- 軟件定義汽車的驅動和挑戰

我是穿拖鞋的漢子,魔都中堅持長期主義的汽車電子工程師。 老規矩,分享一段喜歡的文字,避免自己成為高知識低文化的工程師: 做到欲望極簡,了解自己的真實欲望,不受外在潮流的影響,不盲從,不跟風。把自己的精力全部用在自己。一是去掉多余,凡事找規律,基礎是誠信;二是…

機器學習——10 支持向量機SVM

1 支持向量機 1.1 故事引入看下圖左邊,藍色和紅色的點混在一起,這就像一堆數據,沒辦法用一條簡單的直線把它們分開。再看下圖右邊,有一條直線把藍色和紅色的點分開,這就是SVM在找的“決策邊界”,它能把不同…

若以微服務部署踩坑點

windows docker desktop 部署nacos mysql1、docker部署nacosdocker pull nacos/nacos-server:v2.4.3docker啟動命令 docker run --name nacos -d -p 8848:8848 -p 9848:9848 -p 9849:9849 --privilegedtrue --network bridge -e MODEstandalone -e SPRING_DATASOURCE_PLATFORMm…

Lua基礎+Lua數據類型

Lua基礎 Lua介紹 特點:輕量、小巧。C語言開發。開源。 設計的目的:嵌入到應用程序當中,提供靈活的擴展和定制化的功能。 luanginx,luaredis。 環境安裝 windows上安裝lua: 檢查機器上是否有lua C:\Users\cpf>lua lu…

基于VuePress2開發文檔自部署及嵌入VUE項目

最近在搞前端開發幫助文檔,轉了一圈發現Vue提供了一個高性能的、Vue驅動的靜態網站生成框架-VuePress。VuePress 是一個以 Markdown 為中心的靜態網站生成器。你可以使用 Markdown 來書寫內容(如文檔、博客等),然后 VuePress 會生…

Flask初步學習

文章目錄一、初識Flask1.1 Pycharm修改環境配置1.2 運行第一個flask項目1.3 獲取數據請求1.3.1 動態路由參數一、初識Flask 1.1 Pycharm修改環境配置 file——settings——project——python Interpreter——add interpreter——add local interpreter 1.2 運行第一個fla…

word的正則替換

word查看選中了幾行 word替換掉空行 替換空行 按下 “Ctrl H” 組合鍵打開 “查找和替換” 對話框,在 “查找內容” 框中輸入 “pp”,“^p” 代表段落標記,兩個 “^p” 表示連續的兩個段落標記,即空行。在 “替換為” 框中輸入 “…