AI開發學習之——PyTorch框架

PyTorch 簡介

PyTorch (Python torch)是由 Facebook AI 研究團隊開發的開源機器學習庫,廣泛應用于深度學習研究和生產。它以動態計算圖和易用性著稱,支持 GPU 加速計算,并提供豐富的工具和模塊。

PyTorch的主要特點

  1. 動態計算圖:PyTorch 使用動態計算圖(Autograd),允許在運行時修改圖結構,便于調試和實驗。
  2. GPU 加速:支持 CUDA,能夠利用 GPU 進行高效計算。
  3. 模塊化設計:提供 torch.nn 等模塊,便于構建和訓練神經網絡。
  4. 豐富的生態系統:包括 TorchVision、TorchText 和 TorchAudio 等,支持多種任務。、

PyTorch的安裝

通過以下命令安裝 PyTorch:

pip install torch torchvision

如果國內的速度慢,可以使用-i 參數使用國內的倉庫源。

pip3 install torch -i https://pypi.tuna.tsinghua.edu.cn/simple

除了清華的源之外,也可以使用科大或是北外的數據源。

  • https://mirrors.bfsu.edu.cn/pypi/web/simple

  • https://mirrors.ustc.edu.cn/pypi/web/simple

使用示例

1. 張量操作
import torch# 創建張量
x = torch.tensor([1.0, 2.0, 3.0])
y = torch.tensor([4.0, 5.0, 6.0])# 加法
z = x + y
print(z)  # 輸出: tensor([5., 7., 9.])

這里的輸出為什么不是 tensor([5.0, 7.0, 9.0])呢?
在Python的浮點數表示中,.0后綴通常用于明確表示一個數是浮點數(float),而不是整數(int)。然而,在大多數情況下,Python和許多庫(包括PyTorch,這里提到的tensor是由PyTorch生成的)在打印浮點數時,如果小數點后沒有額外的數字,它們可能會省略.0后綴以簡化輸出。

當使用科學計算庫如NumPy或PyTorch時,它們通常有統一的輸出格式,尤其是在處理數組或tensor時。在你的例子中,tensor([5., 7., 9.])tensor([5.0, 7.0, 9.0])在數值上是完全相同的,只是表示形式略有不同。PyTorch選擇省略小數點后沒有數字的.0后綴,以使輸出更簡潔。

這種輸出格式的選擇主要是出于可讀性和簡潔性的考慮,并不影響tensor中存儲的實際數值。在數值計算中,5.5.0都被視為浮點數,并且在計算中沒有任何區別。

2. 自動求導
import torch# 創建需要梯度的張量
x = torch.tensor([1.0, 2.0, 3.0], requires_grad=True)# 定義函數
y = x * 2
z = y.mean()# 反向傳播
z.backward()# 查看梯度
print(x.grad)  # 輸出: tensor([0.6667, 0.6667, 0.6667])

這里的結果是怎么來的呢?

這段代碼演示了 PyTorch 中的**自動微分(Autograd)**機制,通過計算梯度來實現反向傳播。我們來逐步分析代碼的運算過程。


1. 創建需要梯度的張量
x = torch.tensor([1.0, 2.0, 3.0], requires_grad=True)
  • x 是一個包含 [1.0, 2.0, 3.0] 的 1 階張量(向量)。
  • requires_grad=True 表示 PyTorch 需要跟蹤對 x 的所有操作,以便后續計算梯度。

2. 定義函數
y = x * 2
z = y.mean()
  • y = x * 2:對 x 逐元素乘以 2,得到 y = [2.0, 4.0, 6.0]
  • z = y.mean():計算 y 的均值,即:
    在這里插入圖片描述

3. 反向傳播
z.backward()
  • z.backward() 表示從 z 開始反向傳播,計算 zx 的梯度。
  • 由于 z 是一個標量(單個值),PyTorch 會自動計算 zx 的梯度。

4. 梯度計算

PyTorch 通過鏈式法則計算梯度。具體步驟如下:

(1)計算 zy 的梯度

  • z = y.mean() 可以寫成:
    在這里插入圖片描述

  • 因此,zy 的梯度為:
    在這里插入圖片描述

(2)計算 yx 的梯度

  • y = x * 2 可以寫成:
    yi?=2xi?
  • 因此,yx 的梯度為:
    在這里插入圖片描述

(3)計算 zx 的梯度
根據鏈式法則:
在這里插入圖片描述

將結果代入:
在這里插入圖片描述


5. 查看梯度
print(x.grad)  # 輸出: tensor([0.6667, 0.6667, 0.6667])
  • x.grad 存儲了 zx 的梯度,結果為:
    在這里插入圖片描述

總結

這段代碼的運算過程如下:

  1. 創建需要梯度的張量 x
  2. 定義函數 y = x * 2z = y.mean()
  3. 通過 z.backward() 計算 zx 的梯度。
  4. 根據鏈式法則,梯度計算結果為 [0.6667, 0.6667, 0.6667]

PyTorch 的自動微分機制使得梯度計算變得非常簡單,尤其是在深度學習模型中,這種機制可以自動計算損失函數對模型參數的梯度,從而支持梯度下降等優化算法。

3. 簡單神經網絡
import torch
import torch.nn as nn
import torch.optim as optim# 定義網絡
class SimpleNet(nn.Module):def __init__(self):super(SimpleNet, self).__init__()self.fc = nn.Linear(1, 1)def forward(self, x):return self.fc(x)# 創建網絡、損失函數和優化器
model = SimpleNet()
criterion = nn.MSELoss()
optimizer = optim.SGD(model.parameters(), lr=0.01)# 訓練數據
x = torch.tensor([[1.0], [2.0], [3.0], [4.0]])
y = torch.tensor([[2.0], [4.0], [6.0], [8.0]])# 訓練過程
for epoch in range(100):optimizer.zero_grad()outputs = model(x)loss = criterion(outputs, y)loss.backward()optimizer.step()if (epoch+1) % 10 == 0:print(f'Epoch [{epoch+1}/100], Loss: {loss.item():.4f}')
4. 使用 GPU
import torch# 檢查 GPU 是否可用
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')# 創建張量并移動到 GPU
x = torch.tensor([1.0, 2.0, 3.0]).to(device)
y = torch.tensor([4.0, 5.0, 6.0]).to(device)# 在 GPU 上執行加法
z = x + y
print(z)  # 輸出: tensor([5., 7., 9.], device='cuda:0')

torchtorchvisiontorchaudio

torchtorchvisiontorchaudio 是 PyTorch 生態系統中的三個核心庫,分別用于通用深度學習、計算機視覺和音頻處理任務。以下是它們的詳細介紹和作用:


1. torch

torch 是 PyTorch 的核心庫,提供了深度學習的基礎功能,包括張量操作、自動求導、神經網絡模塊等。

主要功能:
  • 張量操作:支持高效的張量計算(如加法、乘法、矩陣運算等)。
  • 自動求導:通過 Autograd 模塊實現自動微分,便于梯度計算和優化。
  • 神經網絡模塊:提供 torch.nn 模塊,包含各種層(如全連接層、卷積層)和損失函數。
  • 優化器:提供 torch.optim 模塊,包含 SGD、Adam 等優化算法。
  • GPU 加速:支持 CUDA,可以利用 GPU 進行高性能計算。
使用場景:
  • 構建和訓練深度學習模型。
  • 實現自定義的數學運算和算法。
  • 進行張量計算和數值模擬。
示例:
import torch# 創建張量
x = torch.tensor([1.0, 2.0, 3.0], requires_grad=True)# 定義計算
y = x * 2
z = y.mean()# 自動求導
z.backward()# 查看梯度
print(x.grad)  # 輸出: tensor([0.6667, 0.6667, 0.6667])

2. torchvision

torchvision 是 PyTorch 的計算機視覺庫,提供了常用的數據集、模型架構和圖像處理工具。

主要功能:
  • 數據集:提供常用的計算機視覺數據集(如 MNIST、CIFAR-10、ImageNet)。
  • 模型架構:包含預訓練的經典模型(如 ResNet、VGG、AlexNet)。
  • 圖像處理工具:提供數據增強和轉換工具(如裁剪、旋轉、歸一化)。
  • 實用工具:包括可視化工具和評估指標。
使用場景:
  • 圖像分類、目標檢測、分割等計算機視覺任務。
  • 加載和處理圖像數據。
  • 使用預訓練模型進行遷移學習。
示例:
import torchvision
import torchvision.transforms as transforms
from torchvision.models import resnet18# 數據預處理
transform = transforms.Compose([transforms.Resize(256),transforms.CenterCrop(224),transforms.ToTensor(),transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]),
])# 加載數據集
dataset = torchvision.datasets.CIFAR10(root='./data', train=True, download=True, transform=transform)# 加載預訓練模型
model = resnet18(pretrained=True)

3. torchaudio

torchaudio 是 PyTorch 的音頻處理庫,提供了音頻數據的加載、處理和轉換工具。

主要功能:
  • 音頻加載和保存:支持多種音頻格式(如 WAV、MP3)。
  • 音頻處理:提供音頻信號處理工具(如重采樣、頻譜圖生成)。
  • 數據集:包含常用的音頻數據集(如 LibriSpeech、VoxCeleb)。
  • 特征提取:支持提取 MFCC、Mel 頻譜等音頻特征。
使用場景:
  • 語音識別、語音合成、音頻分類等任務。
  • 音頻數據的預處理和特征提取。
  • 加載和處理音頻數據集。
示例:
import torchaudio
import torchaudio.transforms as T# 加載音頻文件
waveform, sample_rate = torchaudio.load('example.wav')# 重采樣
resampler = T.Resample(orig_freq=sample_rate, new_freq=16000)
resampled_waveform = resampler(waveform)# 提取 Mel 頻譜
mel_spectrogram = T.MelSpectrogram(sample_rate=16000)(resampled_waveform)

三者的關系

  • torch 是核心庫,提供基礎功能(如張量計算、自動求導、神經網絡模塊)。
  • torchvision 是基于 torch 的擴展庫,專注于計算機視覺任務。
  • torchaudio 是基于 torch 的擴展庫,專注于音頻處理任務。

三者可以結合使用,例如:

  • 使用 torchvision 處理圖像數據,用 torch 構建和訓練模型。
  • 使用 torchaudio 處理音頻數據,用 torch 構建語音識別模型。

安裝

可以通過以下命令安裝這三個庫:

pip install torch torchvision torchaudio

總結

  • torch:核心庫,提供深度學習的基礎功能。
  • torchvision:計算機視覺庫,提供數據集、模型和圖像處理工具。
  • torchaudio:音頻處理庫,提供音頻加載、處理和特征提取工具。

三者共同構成了 PyTorch 的完整生態系統,適用于各種深度學習任務。



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

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

相關文章

Python安居客二手小區數據爬取(2025年)

目錄 2025年安居客二手小區數據爬取觀察目標網頁觀察詳情頁數據準備工作:安裝裝備就像打游戲代碼詳解:每行代碼都是你的小兵完整代碼大放送爬取結果 2025年安居客二手小區數據爬取 這段時間需要爬取安居客二手小區數據,看了一下相關教程基本…

OpenCV:開運算

目錄 1. 簡述 2. 用腐蝕和膨脹實現開運算 2.1 代碼示例 2.2 運行結果 3. 開運算接口 3.1 參數詳解 3.2 代碼示例 3.3 運行結果 4. 開運算應用場景 5. 注意事項 6. 總結 相關閱讀 OpenCV:圖像的腐蝕與膨脹-CSDN博客 OpenCV:閉運算-CSDN博客 …

JavaWeb入門-請求響應(Day3)

(一)請求響應概述 請求(HttpServletRequest):獲取請求數據 響應(HttpServletResponse):設置響應數據 BS架構:Browser/Server,瀏覽器/服務器架構模式。客戶端只需要瀏覽器就可訪問,應用程序的邏輯和數據都存儲在服務端(維護方便,響應速度一般) CS架構:Client/ser…

【SLAM】于AutoDL云上GPU運行GCNv2_SLAM的記錄

配置GCNv2_SLAM所需環境并實現AutoDL云端運行項目的全過程記錄。 本文首發于?慕雪的寒舍 1. 引子 前幾天寫了一篇在本地虛擬機里面CPU運行GCNv2_SLAM項目的博客:鏈接,關于GCNv2_SLAM項目相關的介紹請移步此文章,本文不再重復說明。 GCNv2:…

羅格斯大學:通過輸入嵌入對齊選擇agent

📖標題:AgentRec: Agent Recommendation Using Sentence Embeddings Aligned to Human Feedback 🌐來源:arXiv, 2501.13333 🌟摘要 🔸多代理系統必須決定哪個代理最適合給定的任務。我們提出了一種新的架…

【實戰篇】Android安卓本地離線實現視頻檢測人臉

實戰篇Android安卓本地離線實現視頻檢測人臉 引言項目概述核心代碼類介紹人臉檢測流程項目地址總結 引言 在當今數字化時代,人臉識別技術已經廣泛應用于各個領域,如安防監控、門禁系統、移動支付等。本文將以第三視角詳細講解如何基于bifan-wei-Face/De…

團體程序設計天梯賽-練習集——L1-025 正整數A+B

一年之際在于春,新年的第一天,大家敲代碼了嗎?哈哈 前言 這道題分值是15分,值這個分,有一小點運算,難度不大,雖然說做出來了,但是有兩個小疑點。 L1-025 正整數AB 題的目標很簡單…

Leetcode:598

1,題目 2,思路 腦筋急轉彎,看題目一時半會還沒搞懂意思。 其實不然就是說ops是個矩陣集合,集合的每個矩陣有倆個元素理解為行列邊距 m和n是理解為一個主矩陣,計算ops的每個小矩陣還有這個主矩陣的交集返回面積 3&…

web前端12--表單和表格

1、表格標簽 使用<table>標簽來定義表格 HTML 中的表格和Excel中的表格是類似的&#xff0c;都包括行、列、單元格、表頭等元素。 區別&#xff1a;HTML表格在功能方面遠沒有Excel表格強大&#xff0c;HTML表格不支持排序、求和、方差等數學計算&#xff0c;主要用于布…

為何 git 默認是 master分支,而github默認是main分支(DeepSeek問答)

為何 git 默認是 master分支&#xff0c;而github默認是main分支 Git 和 GitHub 在默認分支名稱上的差異源于歷史背景和社會因素的變化。 Git 的 master 分支 歷史原因&#xff1a;Git 由 Linus Torvalds 于 2005 年創建&#xff0c;最初使用 master 作為默認分支名稱&#x…

【AI】探索自然語言處理(NLP):從基礎到前沿技術及代碼實踐

Hi &#xff01; 云邊有個稻草人-CSDN博客 必須有為成功付出代價的決心&#xff0c;然后想辦法付出這個代價。 目錄 引言 1. 什么是自然語言處理&#xff08;NLP&#xff09;&#xff1f; 2. NLP的基礎技術 2.1 詞袋模型&#xff08;Bag-of-Words&#xff0c;BoW&#xff…

Java集合+并發(部分)

Java集合 Java集合類的繼承結構和各自的適用情況 Collection ? — List ? — ArrayList&#xff1a;動態數組 ? — LinkedList&#xff1a;底層是雙向鏈表&#xff0c;應用于Queue接口可以用于實現隊列&#xff0c;應用于Deque接口可以用于實現棧 ? — Vector&#x…

第1章 量子暗網中的血色黎明

月球暗面的危機與陰謀 量子隧穿效應催生的幽藍電弧&#xff0c;于環形山表面肆意跳躍&#xff0c;仿若無數奮力掙扎的機械蠕蟲&#xff0c;將月球暗面的死寂打破&#xff0c;徒增幾分詭異。艾麗佇立在被遺棄的“廣寒宮”量子基站頂端&#xff0c;機械義眼之中&#xff0c;倒映著…

AI-ISP論文Learning to See in the Dark解讀

論文地址&#xff1a;Learning to See in the Dark 圖1. 利用卷積網絡進行極微光成像。黑暗的室內環境。相機處的照度小于0.1勒克斯。索尼α7S II傳感器曝光時間為1/30秒。(a) 相機在ISO 8000下拍攝的圖像。(b) 相機在ISO 409600下拍攝的圖像。該圖像存在噪點和色彩偏差。©…

Python3 【高階函數】項目實戰:5 個學習案例

Python3 【高階函數】項目實戰&#xff1a;5 個學習案例 本文包含 5 個關于“高階函數”的綜合應用項目&#xff0c;每個項目都包含完整的程序代碼、測試案例和執行結果。具體項目是&#xff1a; 成績統計分析單詞統計工具簡易計算器工廠任務調度器數據管道處理 項目 1&#…

【Git】初識Git Git基本操作詳解

文章目錄 學習目標Ⅰ. 初始 Git&#x1f4a5;注意事項 Ⅱ. Git 安裝Linux-centos安裝Git Ⅲ. Git基本操作一、創建git本地倉庫 -- git init二、配置 Git -- git config三、認識工作區、暫存區、版本庫① 工作區② 暫存區③ 版本庫④ 三者的關系 四、添加、提交更改、查看提交日…

RK3568使用QT操作LED燈

文章目錄 一、QT中操作硬件設備思路Linux 中的設備文件操作硬件設備的思路1. 打開設備文件2. 寫入數據到設備3. 從設備讀取數據4. 設備控制5. 異常處理在 Qt 中操作設備的典型步驟實際應用中的例子:控制 LED總結二、QT實戰操作LED燈設備1. `mainwindow.h` 頭文件2. `mainwindo…

分布式微服務系統架構第90集:現代化金融核心系統

#1.1 深化數字化轉型&#xff0c;核心面臨新挑戰 1、架構側&#xff1a;無法敏捷協同數字金融經營模式轉型。 2、需求側&#xff1a;業務需求傳導低效始終困擾金融機構。 3、開發側&#xff1a;創新產品上市速度低于期望。 4、運維側&#xff1a;傳統面向資源型監控體系難以支撐…

使用 Spring JDBC 進行數據庫操作:深入解析 JdbcTemplate

目錄 1. Spring JDBC 簡介 2. JdbcTemplate 介紹 3. 創建數據庫和表 4. 配置 Spring JDBC 5. 創建實體類 6. 使用 JdbcTemplate 實現增、刪、改、查操作 7. Spring JDBC 優點 8. 小結 1. Spring JDBC 簡介 Spring JDBC 是 Spring 框架中的一個模塊&#xff0c;旨在簡化…

BUUCTF [Black Watch 入群題]PWN1 題解

1.下載文件 exeinfo checksec 32位 IDA32 看到關鍵函數 read兩次 第一次read的變量s在bss段&#xff1b;第二次的buf到ebp距離為 24 但是第二次的read字節只能剛好填滿返回地址 傳不進去變量 所以想到棧遷移 將棧移動到變量s所在位置上來 同時 這題開了NX 無直接的binsh和s…