【不说废话】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 = 3y² + 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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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)作为一种复古的数字艺术形式,反而焕发出了新的生命力。从独立游…