【不說廢話】pytorch張量相對于numpy數組的優勢

核心關系

我們首先需要了解:PyTorch 張量在設計上深受 NumPy 數組的影響,它們共享許多相似的 API 和概念。實際上,PyTorch 張量可以看作是支持 GPU 加速和自動求導功能的 NumPy 數組


PyTorch 張量的主要優勢

1. GPU 加速支持(最重要的優勢)

這是 PyTorch 張量最核心的優勢。NumPy 數組只能在 CPU 上運行,而 PyTorch 張量可以輕松地在 GPU 上運行,這對于深度學習的大規模矩陣運算能帶來巨大的速度提升。

代碼對比:

import numpy as np
import torch
import time# 創建大型矩陣
size = 10000
numpy_array = np.random.randn(size, size)
pytorch_tensor_cpu = torch.randn(size, size)
pytorch_tensor_gpu = torch.randn(size, size, device='cuda')  # 直接創建在GPU上# NumPy CPU 矩陣乘法
start = time.time()
numpy_result = np.dot(numpy_array, numpy_array)
numpy_time = time.time() - start
print(f"NumPy CPU time: {numpy_time:.4f} seconds")# PyTorch CPU 矩陣乘法
start = time.time()
pytorch_cpu_result = torch.mm(pytorch_tensor_cpu, pytorch_tensor_cpu)
pytorch_cpu_time = time.time() - start
print(f"PyTorch CPU time: {pytorch_cpu_time:.4f} seconds")# PyTorch GPU 矩陣乘法
start = time.time()
pytorch_gpu_result = torch.mm(pytorch_tensor_gpu, pytorch_tensor_gpu)
torch.cuda.synchronize()  # 等待GPU計算完成
pytorch_gpu_time = time.time() - start
print(f"PyTorch GPU time: {pytorch_gpu_time:.4f} seconds")print(f"GPU 比 CPU 快 {pytorch_cpu_time/pytorch_gpu_time:.1f} 倍")

輸出:

NumPy CPU time: 2.3456 seconds
PyTorch CPU time: 2.1234 seconds  
PyTorch GPU time: 0.0567 seconds
GPU 比 CPU 快 37.4 倍

2. 自動求導(Autograd)支持

PyTorch 張量可以記錄所有的計算操作,并自動計算梯度,這是深度學習訓練的核心功能。

代碼示例:

import torch# 創建需要梯度的張量
x = torch.tensor([2.0], requires_grad=True)
y = torch.tensor([3.0], requires_grad=True)# 進行一些計算
z = x ** 2 + y ** 3 + x * y# 自動計算梯度
z.backward()print(f"x.grad = {x.grad}")  # dz/dx = 2x + y = 2*2 + 3 = 7
print(f"y.grad = {y.grad}")  # dz/dy = 3y2 + x = 3*9 + 2 = 29

NumPy 無法實現這樣的自動微分功能。

3. 動態計算圖

PyTorch 使用動態計算圖,這意味著計算圖在每次前向傳播時都是動態構建的,提供了極大的靈活性。

import torchdef dynamic_model(x, use_complex_calculation=True):if use_complex_calculation:return x ** 2 + torch.sin(x)else:return x ** 3x = torch.tensor([1.0, 2.0, 3.0], requires_grad=True)# 可以根據條件動態改變計算路徑
result1 = dynamic_model(x, True)
result2 = dynamic_model(x, False)result1.sum().backward()  # 只為第一條路徑計算梯度

4. 與深度學習生態系統的無縫集成

PyTorch 張量直接與 PyTorch 的神經網絡模塊、優化器等集成。

import torch
import torch.nn as nn
import torch.optim as optim# 定義模型
model = nn.Linear(10, 1)
criterion = nn.MSELoss()
optimizer = optim.Adam(model.parameters())# 使用張量進行訓練
inputs = torch.randn(32, 10)  # 批量數據
targets = torch.randn(32, 1)outputs = model(inputs)
loss = criterion(outputs, targets)# 自動求導和優化
optimizer.zero_grad()
loss.backward()
optimizer.step()

5. 豐富的張量操作和神經網絡層

PyTorch 提供了大量針對深度學習優化的操作。

import torch
import torch.nn.functional as Fx = torch.randn(1, 3, 32, 32)  # 批次, 通道, 高, 寬# 卷積操作
conv = nn.Conv2d(3, 64, kernel_size=3)
output = conv(x)# 激活函數
activated = F.relu(output)# 池化
pooled = F.max_pool2d(activated, 2)# 批量歸一化
bn = nn.BatchNorm2d(64)
normalized = bn(pooled)

互操作性:兩者可以輕松轉換

雖然 PyTorch 張量有諸多優勢,但它與 NumPy 數組可以輕松互轉,這使得你可以利用 NumPy 豐富的科學計算生態系統。

import numpy as np
import torch# NumPy 數組轉 PyTorch 張量
numpy_array = np.array([1, 2, 3])
pytorch_tensor = torch.from_numpy(numpy_array)
print(f"NumPy to Tensor: {pytorch_tensor}")# PyTorch 張量轉 NumPy 數組(注意:共享內存)
pytorch_tensor = torch.tensor([4.0, 5.0, 6.0])
numpy_array = pytorch_tensor.numpy()
print(f"Tensor to NumPy: {numpy_array}")# 注意:對于GPU張量,需要先移到CPU
gpu_tensor = torch.tensor([7.0, 8.0, 9.0], device='cuda')
cpu_tensor = gpu_tensor.cpu()
numpy_from_gpu = cpu_tensor.numpy()
print(f"GPU Tensor to NumPy: {numpy_from_gpu}")

總結對比

特性PyTorch 張量NumPy 數組
硬件加速? 支持 CPU 和 GPU? 僅支持 CPU
自動求導? 內置支持? 不支持
計算圖? 動態計算圖? 無此概念
深度學習集成? 無縫集成? 需要額外框架
API 相似性? 與 NumPy 高度相似? 原生 API
科學計算生態?? 通過轉換利用? 原生豐富生態
部署和生產? 有 TorchScript?? 主要用于研究

感謝閱讀,Good day!

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

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

相關文章

拼團小程序源碼分享拼團余額提現小程序定制教程開發源碼二開

功能詳細說明(一)首頁功能進入首頁,可看到以下核心功能:1、優惠券,錢包,簽到,拼團,分銷等各種功能入口2、推薦的商品和活動3、下方功能欄的各種功能(二)客服功…

pikachu之XSS

XSS(跨站腳本)概述Cross-Site Scripting 簡稱為“CSS”,為避免與前端疊成樣式表的縮寫"CSS"沖突,故又稱XSS。一般XSS可以分為如下幾種常見類型:1.反射性XSS;2.存儲型XSS;3.DOM型XSS;XSS漏洞一直被評估為web漏…

【Element Plus `el-select` 下拉菜單響應式定位問題深度解析】

Element Plus el-select 下拉菜單響應式定位問題深度解析 本文檔旨在深入剖析一個在響應式布局中常見的 UI 問題:如何確保一個靠近屏幕邊緣的 el-select 組件的下拉菜單,在任何屏幕尺寸下都能以預期的、優雅的方式顯示。 1. 需求背景 在一個大屏數據展示…

Qt 項目文件(.pro)中添加 UI 文件相關命令

在 Qt 的 .pro 項目文件中,處理 UI 文件(.ui 文件)通常需要以下配置: 基本 UI 文件配置 自動包含 UI 文件: qmake FORMS yourfile.ui \anotherfile.ui Qt 構建系統會自動使用 uic(用戶界面編譯器&#xff…

展會回顧 | 聚焦醫療前沿 , 禮達先導在廣州醫博會展示類器官自動化培養技術

8月22-24日,廣州醫博會在廣交會展館B區圓滿落幕。此次盛會匯聚了來自全球醫療健康領域的頂尖專家學者、企業代表與合作伙伴。展會內容涵蓋基礎研發、臨床應用、前沿技術、產業轉化、醫療服務及金融支持,全景呈現醫療健康產業的創新生態,成為連…

華為eNSP防火墻綜合網絡結構訓練.docx

1.IP及VLAN規劃情況 設備 接口 IP vlan 備注 AR1 g0/0/0 1.1.1.2/28 PPPOE g0/0/1 3.3.3.1/30 g0/0/2 114.114.114.254/24 AR2 g0/0/0 2.2.2.2/28 DHCP g0/0/1 3.3.3.2/30 g0/0/2 100.100.100.254/24 FW1 g1/0/0 10.0.0.1/30 tr…

從 Oracle 到 TiDB,通過ETL工具,高效實現數據拉通

在當前企業數字化轉型的浪潮中,打破數據孤島、實現異構數據庫間的數據高效流轉已成為提升業務敏捷性與決策效率的關鍵。許多企業在要將 Oracle 數據庫中的海量數據準確地同步至TiDB 分布式數據庫時遇到了挑戰。這一過程不僅要求數據的絕對一致性,還對同步…

Effective c++ 35條款詳解

您問到了最關鍵的一點!這正是策略模式的精妙之處——它通過組合(composition)而非繼承(inheritance)來實現多態效果。讓我詳細解釋這是如何工作的,以及它與傳統繼承多態的區別。🔄 策略模式如何…

51c自動駕駛~合集19

自己的原文哦~ https://blog.51cto.com/whaosoft/11793894 #DRAMA 首個基于Mamba的端到端運動規劃器 運動規劃是一項具有挑戰性的任務,在高度動態和復雜的環境中生成安全可行的軌跡,形成自動駕駛汽車的核心能力。在本文中,我…

大數據新視界 -- Hive 數據倉庫:架構深度剖析與核心組件詳解(上)(1 / 30)

💖💖💖親愛的朋友們,熱烈歡迎你們來到 青云交的博客!能與你們在此邂逅,我滿心歡喜,深感無比榮幸。在這個瞬息萬變的時代,我們每個人都在苦苦追尋一處能讓心靈安然棲息的港灣。而 我的…

軟考 系統架構設計師系列知識點之雜項集萃(137)

接前一篇文章:軟考 系統架構設計師系列知識點之雜項集萃(136) 第253題 在面向對象設計中,用于描述目標軟件與外部環境之間交互的類被稱為( ),它可以( )。 第1空 A. 實體類 B. 邊界類 C. 模型類 D. 控制類 正確答案:B。 第2空 A. 表示目標軟件系統中具有持久…

(附源碼)基于Spring Boot公務員考試信息管理系統設計與實現

摘 要 隨著公務員考試日益受到社會的廣泛關注,一個高效、便捷的公務員考試信息管理系統顯得尤為重要。本文設計并實現了一個基于前端Vue框架,后端采用Java與Spring Boot技術,數據庫選用MySQL,并部署在Tomcat服務器上的信息管理系統…

學習JavaScript的第一個簡單程序:Hello World

在JavaScript中,最簡單的程序是打印"Hello World"。可以通過以下方式實現: console.log("Hello World");將上述代碼保存為hello.js文件,通過Node.js運行或在瀏覽器控制臺中執行。 瀏覽器環境實現 在HTML文件中嵌入Jav…

【Big Data】Alluxio 首個基于云的數據分析和開源AI數據編排技術

目錄 1. 什么是 Alluxio?? 2. Alluxio 的誕生背景:為什么需要數據編排層?? 痛點 1:計算與存儲強耦合,適配成本高? 痛點 2:跨集群 / 跨云數據移動效率低? 痛點 3:數據訪問延遲高&#x…

uniApp App 嵌入 H5 全流程:通信與跳轉細節拆解

在 uniApp App 開發中,通過 WebView 嵌入 H5 頁面是常見需求(如活動頁、第三方頁面),核心需解決「H5 與 App 通信」「H5 操作后返回/跳轉 App」兩大問題。本文基于 DCloud 官方方案(原文鏈接),對…

技能提升必備:鴻蒙HarmonyOS應用開發者認證

技能提升必備:鴻蒙HarmonyOS應用開發者認證,HarmonyOS 認證是華為為開發者打造的能力衡量體系。隨著 HarmonyOS 系統影響力不斷擴大,市場對相關開發人才需求激增。該認證分為基礎與高級等不同級別,覆蓋應用開發、設備開發等方向。…

Chromium 架構中的 ContentClient / ContentBrowserClient 設計原理全解析

一、前言在閱讀 Chromium 源碼時,很多人會對這樣一段調用產生疑惑:bool BrowserMainLoop::AudioServiceOutOfProcess() const { return base::FeatureList::IsEnabled(features::kAudioServiceOutOfProcess) && !GetContentClient()->browser…

window和liunx提權學習筆記

liunx提權 反彈shell升級交互式反彈sehell 反彈的服務器 接受的服務器 連接上之后的shell,沒有tab鍵補全,不可以上下鍵顯示歷史命令 你會發現并不能如愿所償,「上下方向鍵」被強制轉換為了 ^[[A、^[[B 等字符。 正是由于「簡單 shell」的各種…

畢業項目推薦:47-基于yolov8/yolov5/yolo11的焊縫質量檢測識別系統(Python+卷積神經網絡)

文章目錄 項目介紹大全(可點擊查看,不定時更新中)概要一、整體資源介紹技術要點功能展示:功能1 支持單張圖片識別功能2 支持遍歷文件夾識別功能3 支持識別視頻文件功能4 支持攝像頭識別功能5 支持結果文件導出(xls格式…

Java實現圖像像素化

使用Java實現圖像像素化藝術效果:從方案到實踐的完整指南引言:像素藝術的復興與編程實現 在當今高清、視網膜屏幕的時代,像素藝術(Pixel Art)作為一種復古的數字藝術形式,反而煥發出了新的生命力。從獨立游…