python第39天打卡

1.灰度圖像

作為圖像數據,相較于結構化數據(表格數據)他的特點在于他每個樣本的的形狀并不是(特征數,),而是(寬,高,通道數)

# 先繼續之前的代碼
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)
Label: 7上述是昨天的代碼,我們介紹了圖像數據的預處理,這是我們首次接觸圖像數據,他和之前的結構化數據有什么差異點呢?結構化數據(如表格)的形狀通常是 (樣本數, 特征數),例如 (1000, 5) 表示 1000 個樣本,每個樣本有 5 個特征。圖像數據的形狀更復雜,需要保留空間信息(高度、寬度、通道),因此不能直接用一維向量表示。其中顏色信息往往是最開始輸入數據的通道的含義,因為每個顏色可以用紅綠藍三原色表示,因此一般輸入數據的通道數是 3。維度索引	含義	數值說明
0	通道數(Channels)	1 表示這是一張灰度圖(僅有一個顏色通道,如黑白照片)。
如果是彩色圖(如RGB),通道數為 3。
1	高度(Height)	28 表示圖像的垂直像素數為28像素。
2	寬度(Width)	28 表示圖像的水平像素數為28像素。
MNIST 數據集是手寫數字的 灰度圖像,每個像素點的取值范圍為 0-255(黑白程度),因此 通道數為 1。圖像尺寸統一為 28×28 像素。# 打印下圖片的形狀
image.shape
torch.Size([1, 28, 28])
1.2 彩色圖像
在 PyTorch 中,圖像數據的形狀通常遵循 (通道數, 高度, 寬度) 的格式(即 Channel First 格式),這與常見的 (高度, 寬度, 通道數)(Channel Last,如 NumPy 數組)不同。---注意順序關系,注意點:如果用matplotlib庫來畫圖,需要轉換下順序,我們后續介紹
模型輸入通常需要 批次維度(Batch Size),形狀變為 (批次大小, 通道數, 高度, 寬度)。例如,批量輸入 10 張 MNIST 圖像時,形狀為 (10, 1, 28, 28)。
# 打印一張彩色圖像,用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.黑白圖像模型的定義

# 先歸一化,再標準化
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圖像尺寸模型結構信息:
----------------------------------------------------------------Layer (type)               Output Shape         Param #
================================================================Flatten-1                  [-1, 784]               0Linear-2                  [-1, 128]         100,480ReLU-3                  [-1, 128]               0Linear-4                   [-1, 10]           1,290
================================================================
Total params: 101,770
Trainable params: 101,770
Non-trainable params: 0
----------------------------------------------------------------
Input size (MB): 0.00
Forward/backward pass size (MB): 0.01
Params size (MB): 0.39
Estimated Total Size (MB): 0.40

@浙大疏錦行

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

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

相關文章

win11小組件功能缺失的恢復方法

問題說明:重置了win11系統,結果小組件功能找不到了,最后用以下辦法解決。 1. 以管理員身份打開 PowerShell 或 CMD。 2. 運行以下命令: winget install 9MSSGKG348SP 注:如果報錯,可嘗試先卸載再安裝…

Kali Linux從入門到實戰:系統詳解與工具指南

一、Kali Linux簡介 Kali Linux是一款基于Debian的Linux發行版,專為滲透測試和網絡安全審計設計,由Offensive Security團隊維護。其前身是BackTrack,目前集成了超過600款安全工具,覆蓋滲透測試全流程,是網絡安全領域…

C語言 — 文件

目錄 1.流1.1 流的概念1.2 常見的的流 2.文件的打開和關閉2.1 fopen函數2.2 fclose函數2.3 文件的打開和關閉 3.文件的輸入輸出函數3.1 fputc函數3.2 fgetc函數3.3 feof函數和ferror函數3.4 fputs函數3.5 fgets函數3.6 fwrite函數3.7 fread函數3.8 fprintf函數3.9 fscanf函數 4…

Pull Request Integration 拉取請求集成

今天我想要把我創建的項目,通過修改yaml里面的內容,讓我在main分支下的其他分支拉取請求的時候自動化測試拉取的內容,以及將測試結果上傳到控制臺云端。 首先我通過修改yaml文件里面的內容 name: Build and Teston:push:branches:- mainjobs:…

NodeJS全棧開發面試題講解——P3數據庫(MySQL / MongoDB / Redis)

3.1 如何用 Node.js 連接 MySQL?你用過哪些 ORM? 面試官您好,我先介紹如何用 Node.js 連接 MySQL,然后補充我常用的 ORM 工具。 🔌 原生連接 MySQL 使用 mysql2 模塊: npm install mysql2 const mysql …

Redis最佳實踐——性能優化技巧之數據結構選擇

Redis在電商應用中的數據結構選擇與性能優化技巧 一、電商核心場景與數據結構選型矩陣 應用場景推薦數據結構內存占用讀寫復雜度典型操作商品詳情緩存Hash低O(1)HGETALL, HMSET購物車管理Hash中O(1)HINCRBY, HDEL用戶會話管理Hash低O(1)HSETEX, HGET商品分類目錄Sorted Set高O…

題單:最大公約數(輾轉相除法)

題目描述 所謂 “最大公約數(GCD)” ,是指所有公約數中最大的那個,例如 12 和 1818 的公約數有 1,2,3,6 ,所以 12 和 18 的最大公約數為 6 。 輾轉相除法,又名歐幾里德算法(Euclidean Algorit…

hadoop完整安裝教程(附帶jdk1.8+vim+ssh安裝)

本篇帶領大家在uabntu20虛擬機上安裝hadoop,其中還包括jdk1.8、ssh、vim的安裝教程,(可能是)史上最全的安裝教程!!!若有疑問可以在評論區或者私信作者。建議在虛擬機上觀看此博客,便…

Flutter、React Native、Unity 下的 iOS 性能與調試實踐:兼容性挑戰與應對策略(含 KeyMob 工具經驗)

移動端跨平臺開發逐漸成為常態,Flutter、React Native、Unity、Hybrid App 等框架在各類 iOS 項目中頻繁出現。但隨之而來的,是一系列在 iOS 設備上調試難、性能數據采集難、日志整合難的問題。 今天這篇文章,我從實際項目出發,聊…

PyCharm接入DeepSeek,實現高效AI編程

介紹本土AI工具DeepSeek如何結合PyCharm同樣實現該功能。 一 DeepSeek API申請 首先進入DeepSeek官網:DeepSeek 官網 接著點擊右上角的 “API 開放平臺“ 然后點擊API keys 創建好的API key,記得復制保存好 二 pycharm 接入deepseek 首先打開PyCh…

Cinnamon開始菜單(1):獲取應用數據

看了半天:/usr/share/cinnamon/applets/menucinnamon.org,終于挖到了精髓。 Cinnamon.AppSystem.get_default() 獲取系統應用數據 get_tree() 獲取樹機構 get_root_directory() 獲取根目錄 iter() 遍歷 get_name() 獲取名稱 get_desktop_file_id()…

git reset --hard HEAD~1與git reset --hard origin/xxx

git reset --hard HEAD~1與git reset --hard origin/xxx git reset --hard origin/xxx有時候會太長,手工輸入略微繁瑣,可以考慮: git reset --hard HEAD~1 替代。 或者使用這種方式 git reset撤銷當前分支所有修改,恢復到最近一…

鴻蒙OSUniApp PWA開發實踐:打造跨平臺漸進式應用#三方框架 #Uniapp

UniApp PWA開發實踐:打造跨平臺漸進式應用 前言 在過去的一年里,我們團隊一直在探索如何利用UniApp框架開發高性能的PWA應用。特別是隨著鴻蒙系統的普及,我們積累了不少有價值的實踐經驗。本文將分享我們在開發過程中的技術選型、架構設計和…

ansible自動化playbook簡單實踐

方法一:部分使用ansible 基于現有的nginx配置文件,定制部署nginx軟件,將我們的知識進行整合 定制要求: 啟動用戶:nginx-test,uid是82,系統用戶,不能登錄 啟動端口82 web項目根目錄/…

【Office】Excel兩列數據比較方法總結

在Excel中,比較兩列數據是否相等有多種方法,以下是常用的幾種方式: 方法1:使用公式(返回TRUE/FALSE) 在空白列(如C列)輸入公式,向下填充即可逐行比較兩列(如…

day 42

知識點回顧 1.回調函數 2.lambda函數 3.hook函數的模塊鉤子和張量鉤子 4.Grad-CAM的示例 一。回調函數示例 Hook本質是回調函數,所以我們先介紹一下回調函數。回調函數是作為參數傳遞給其他函數的函數,其目的是在某個特定事件發生時被調用執行。這…

10.安卓逆向2-frida hook技術-frida基本使用-frida指令(用于hook)

免責聲明:內容僅供學習參考,請合法利用知識,禁止進行違法犯罪活動! 內容參考于:圖靈Python學院 工具下載: 鏈接:https://pan.baidu.com/s/1bb8NhJc9eTuLzQr39lF55Q?pwdzy89 提取碼&#xff1…

LLM-MPC混合架構:車載大語言模型用來增強自動駕駛系統

1. 概述 2025年,蘇黎世研究團隊在RSS2025會議上正式提出「LLM-MPC混合架構」,標志著大語言模型(LLM)在自動駕駛系統中的實用化邁出關鍵一步。該方案旨在解決傳統深度學習模型在極端交通場景中泛化能力不足的問題。通過在車載終端…

解釋k8s種ConfigMap和Secret的作用,如何在Pod中掛載環境變

一、ConfigMap & Secret 核心定位 屬于Kubernetes的配置管理特性,用于解耦應用與配置 1. ConfigMap 作用:存儲非敏感配置數據 存儲內容: 環境變量命令行參數配置文件(如JSON/XML/YAML)系統參數(如J…

Android --- ObjectAnimator 和 TranslateAnimation有什么區別

文章目錄 2. 作用范圍和功能2. 動畫表現3. 是否修改 View 的屬性4. 適用場景5. 性能總結: ObjectAnimator 和 TranslateAnimation 都是 Android 中常用的動畫類型,但它們有以下幾個關鍵的區別: 2. 作用范圍和功能 ObjectAnimator&#xff1a…