发布时间:2026/7/5 12:00:52
PyTorch Tensor的创建、运算与GPU加速实战
1. PyTorch Tensor基础概念与创建方法Tensor是PyTorch中最核心的数据结构你可以把它理解为Numpy数组的升级版。想象一下Tensor就像是一个可以放在GPU上运行的超级数组它能帮我们快速完成各种数学运算。我第一次接触Tensor时发现它和Numpy的ndarray非常相似但多了一个超能力——GPU加速。创建Tensor的方法多种多样最基础的是使用torch.tensor()函数。比如你想把一个Python列表转换成Tensorimport torch data [[1, 2], [3, 4]] x torch.tensor(data) print(x)这里有个新手常踩的坑如果你给的列表维度不整齐比如[[1,2],[3]]PyTorch会直接报错。我刚开始就犯过这个错误调试了半天才发现是数据格式问题。PyTorch还提供了一系列便捷的初始化函数zeros torch.zeros(2, 3) # 全0矩阵 ones torch.ones(2, 3) # 全1矩阵 rand torch.rand(2, 3) # 0-1均匀分布随机数 randn torch.randn(2, 3) # 标准正态分布随机数在实际项目中我经常用torch.randn来初始化神经网络权重。记得设置随机种子保证结果可复现torch.manual_seed(42) # 设置随机种子 a torch.randn(2, 2) b torch.randn(2, 2) print(a b) # 每次运行结果相同2. Tensor的常用操作与运算掌握了Tensor的创建方法后我们来看看它能做什么。Tensor支持几乎所有你能想到的数学运算而且语法非常直观。2.1 基础数学运算加减乘除这些基础运算可以直接用运算符a torch.tensor([1, 2, 3]) b torch.tensor([4, 5, 6]) print(a b) # 逐元素相加 print(a * b) # 逐元素相乘矩阵乘法要用或torch.matmul()x torch.randn(2, 3) y torch.randn(3, 4) z x y # 矩阵乘法 print(z.shape) # 输出(2,4)2.2 广播机制PyTorch的广播机制和Numpy一样智能。比如你想把一个向量加到矩阵的每一行上matrix torch.ones(3, 4) vector torch.arange(4) result matrix vector # 自动广播 print(result)广播规则简单来说就是从最后一个维度开始比较要么维度大小相同要么其中一个为1或者其中一个维度不存在。我在实际项目中经常用广播来简化代码避免不必要的循环。2.3 形状操作改变Tensor形状是家常便饭常用的方法有x torch.arange(12) y x.view(3, 4) # 改变形状 z x.reshape(3, 4) # 功能类似view print(y.shape, z.shape)view和reshape的主要区别在于view要求数据在内存中是连续的而reshape会自动处理非连续情况。如果遇到view报错可以先用contiguous()方法。3. Tensor与Numpy的互操作PyTorch和Numpy可以无缝协作这在数据处理阶段特别有用。我经常先用Numpy处理原始数据再转成Tensor喂给模型。3.1 Tensor转Numpya torch.ones(3) b a.numpy() # Tensor转Numpy print(type(b)) # class numpy.ndarray需要注意的是如果Tensor在GPU上需要先移到CPUif torch.cuda.is_available(): a a.cpu().numpy()3.2 Numpy转Tensorimport numpy as np arr np.array([1, 2, 3]) tensor torch.from_numpy(arr) # Numpy转Tensor print(tensor)转换后的Tensor和原Numpy数组共享内存修改一个会影响另一个。这在某些情况下会导致难以发现的bug需要特别注意。4. GPU加速实战终于来到最激动人心的部分——GPU加速。PyTorch让GPU计算变得异常简单这也是它深受欢迎的重要原因。4.1 检查GPU可用性首先检查你的设备是否支持CUDAprint(torch.cuda.is_available()) # 输出True表示可用 print(torch.cuda.device_count()) # 查看GPU数量 print(torch.cuda.get_device_name(0)) # 查看GPU型号4.2 Tensor在CPU和GPU间移动把Tensor放到GPU上非常简单device torch.device(cuda if torch.cuda.is_available() else cpu) x torch.randn(3, 3).to(device) # 移动到GPU y torch.randn(3, 3).cuda() # 另一种写法从GPU移回CPUx_cpu x.cpu() # 移回CPU4.3 直接在GPU上创建Tensor为了获得最佳性能可以跳过CPU直接在GPU上创建Tensorgpu_tensor torch.zeros(3, 3, devicecuda)我在训练大型模型时发现直接在GPU上初始化参数能节省约10%的时间。对于超大规模训练这个优化非常值得。4.4 多GPU数据并行如果你的机器有多个GPU可以用DataParallel轻松实现数据并行model MyModel() if torch.cuda.device_count() 1: model torch.nn.DataParallel(model) model.to(device)这样模型会自动把数据切分到各个GPU上并行计算。我曾经用这个方法把训练速度提高了近3倍使用4块GPU。5. 性能优化技巧经过多次项目实践我总结了一些Tensor操作的性能优化经验尽量使用内置函数PyTorch的内置函数经过高度优化比自己用Python实现的要快得多。减少CPU-GPU数据传输频繁在CPU和GPU之间拷贝数据会严重影响性能。尽量保持数据在GPU上完成所有操作。使用原地操作带下划线的方法如add_()可以节省内存a torch.rand(3,3) a.add_(1) # 原地加1不创建新Tensor合理使用torch.no_grad()在不需要计算梯度的场景下使用with torch.no_grad(): # 这里面的操作不会跟踪梯度 y model(x)选择合适的精度大多数情况下float32足够用某些场景可以尝试float16来节省内存和计算量。记得第一次训练GAN模型时我因为没注意这些优化点训练速度比预期慢了近5倍。后来逐步应用这些技巧性能得到了显著提升。

相关新闻

STM32F446ZE与TPS65263电源管理设计指南
2026/7/5 12:00:52

STM32F446ZE与TPS65263电源管理设计指南

1. TPS65263与STM32F446ZE的协同设计价值在嵌入式系统开发中,电源管理模块的设计往往决定了整个系统的稳定性和能效表现。TPS65263作为TI推出的三路输出同步降压转换器,与STM32F446ZE这款高性能ARM Cortex-M4 MCU的组合,为复杂嵌入式系统提供…

阅读更多
无监督学习:聚类/降维/异常检测
2026/7/5 12:00:52

无监督学习:聚类/降维/异常检测

无监督学习:聚类/降维/异常检测 1. 聚类算法 from sklearn.cluster import KMeans, DBSCAN, AgglomerativeClustering# K-Means kmeans KMeans(n_clusters3, random_state42) labels kmeans.fit_predict(X)# 肘部法则选择 K inertias [] for k in range(2, 11):k…

阅读更多
5个理由让你爱上Nucleus Co-Op:Windows终极单机多人游戏方案
2026/7/5 11:00:52

5个理由让你爱上Nucleus Co-Op:Windows终极单机多人游戏方案

5个理由让你爱上Nucleus Co-Op:Windows终极单机多人游戏方案 【免费下载链接】nucleuscoop Starts multiple instances of a game for split-screen multiplayer gaming! 项目地址: https://gitcode.com/gh_mirrors/nu/nucleuscoop 还在为无法与朋友在同一台…

阅读更多
分布式事务尝试取消确认模式的具体实现步骤
2026/7/5 13:00:52

分布式事务尝试取消确认模式的具体实现步骤

分布式事务尝试取消确认模式的具体实现步骤在分布式系统架构中,事务一致性是核心挑战之一。传统的两阶段提交协议(2PC)虽然提供了强一致性保证,但其同步阻塞和协调者单点故障问题限制了高并发场景下的可用性。尝试取消确认模式&am…

阅读更多
openeuler/os-compat-analyzer架构解密:Golang后端+Vue3前端如何实现极速兼容性分析
2026/7/5 13:00:52

openeuler/os-compat-analyzer架构解密:Golang后端+Vue3前端如何实现极速兼容性分析

openeuler/os-compat-analyzer架构解密:Golang后端Vue3前端如何实现极速兼容性分析 【免费下载链接】os-compat-analyzer The os-compat-analyzer is a compatibility analysis tool for operating systems and upper-layer software, supporting OS migration and …

阅读更多
边缘计算中MoE模型的SSD I/O优化与FlashMoE架构
2026/7/5 13:00:52

边缘计算中MoE模型的SSD I/O优化与FlashMoE架构

1. 边缘计算中的MoE推理挑战与SSD I/O瓶颈 在边缘设备上部署混合专家模型(Mixture-of-Experts, MoE)时,存储访问效率成为关键瓶颈。与传统DNN模型不同,MoE模型的动态专家激活特性导致其内存访问模式具有显著的不规则性——每次推理…

阅读更多
非完整移动机器人推挤技术与物体重排算法解析
2026/7/5 13:00:52

非完整移动机器人推挤技术与物体重排算法解析

1. 非完整移动机器人推挤技术概述在仓储物流和工业自动化领域,多物体重排是一项基础但极具挑战性的任务。想象一下这样的场景:一个仓库机器人需要将货架上散乱的箱子重新排列成指定顺序,或者生产线上的机械臂需要调整工作台上零部件的布局。传…

阅读更多
大型系统设计面试题解
2026/7/5 13:00:52

大型系统设计面试题解

大型系统设计面试题解在当今技术驱动的时代,大型系统设计能力已成为衡量高级工程师与架构师核心竞争力的关键标尺。无论是硅谷巨头还是国内一线互联网公司,系统设计面试都是高级别岗位招聘中不可或缺的一环。它不仅是技术知识的检验,更是候选…

阅读更多
为什么FalconFS在小文件性能上超越Lustre 7倍?AI存储优化揭秘
2026/7/5 12:00:52

为什么FalconFS在小文件性能上超越Lustre 7倍?AI存储优化揭秘

为什么FalconFS在小文件性能上超越Lustre 7倍?AI存储优化揭秘 【免费下载链接】FalconFS A high-performance distributed file system designed for AI workloads. 项目地址: https://gitcode.com/openeuler/FalconFS 前往项目官网免费下载:http…

阅读更多
通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御
2026/7/5 0:00:50

通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

1. 项目概述与漏洞背景最近在梳理一些历史OA系统的安全风险时,通达OA v11.6版本中的一个老漏洞又进入了我的视线。这个漏洞位于/general/bi_design/appcenter/report_bi.func.php文件中,是一个典型的SQL注入点。虽然这个漏洞的利用方式看起来并不复杂&am…

阅读更多
3步彻底解决Windows右键菜单混乱问题:ContextMenuManager使用全攻略
2026/7/5 0:00:50

3步彻底解决Windows右键菜单混乱问题:ContextMenuManager使用全攻略

3步彻底解决Windows右键菜单混乱问题:ContextMenuManager使用全攻略 【免费下载链接】ContextMenuManager 🖱️ 纯粹的Windows右键菜单管理程序 项目地址: https://gitcode.com/gh_mirrors/co/ContextMenuManager 你是否曾为Windows右键菜单中那些…

阅读更多
GXDE OS下Wayland兼容性实战:从deepin-mutter原理到VMware Tools修复
2026/7/5 0:00:50

GXDE OS下Wayland兼容性实战:从deepin-mutter原理到VMware Tools修复

如果你正在用 GXDE OS 或者任何基于 Deepin 的发行版,并且遇到了“检测到窗口系统采用 Wayland 协议,程序即将退出”这类弹窗,或者发现 VMware Tools 在 Ubuntu 24.04 这类默认 Wayland 的系统上启动失败,那这篇文章就是为你准备的…

阅读更多
通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御
2026/7/5 0:00:50

通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

1. 项目概述与漏洞背景最近在梳理一些历史OA系统的安全风险时,通达OA v11.6版本中的一个老漏洞又进入了我的视线。这个漏洞位于/general/bi_design/appcenter/report_bi.func.php文件中,是一个典型的SQL注入点。虽然这个漏洞的利用方式看起来并不复杂&am…

阅读更多
3步彻底解决Windows右键菜单混乱问题:ContextMenuManager使用全攻略
2026/7/5 0:00:50

3步彻底解决Windows右键菜单混乱问题:ContextMenuManager使用全攻略

3步彻底解决Windows右键菜单混乱问题:ContextMenuManager使用全攻略 【免费下载链接】ContextMenuManager 🖱️ 纯粹的Windows右键菜单管理程序 项目地址: https://gitcode.com/gh_mirrors/co/ContextMenuManager 你是否曾为Windows右键菜单中那些…

阅读更多
GXDE OS下Wayland兼容性实战:从deepin-mutter原理到VMware Tools修复
2026/7/5 0:00:50

GXDE OS下Wayland兼容性实战:从deepin-mutter原理到VMware Tools修复

如果你正在用 GXDE OS 或者任何基于 Deepin 的发行版,并且遇到了“检测到窗口系统采用 Wayland 协议,程序即将退出”这类弹窗,或者发现 VMware Tools 在 Ubuntu 24.04 这类默认 Wayland 的系统上启动失败,那这篇文章就是为你准备的…

阅读更多
基于Dify与DeepSeek构建私有知识库问答系统实战指南
2026/7/4 11:17:16

基于Dify与DeepSeek构建私有知识库问答系统实战指南

在业务中快速构建一个能理解私有文档、准确回答专业问题的智能助手,是很多开发团队面临的共同挑战。传统方案往往需要从零开始搭建复杂的 RAG(检索增强生成)系统,涉及文档解析、向量化、检索、大模型调用等多个环节,整…

阅读更多
FAE放射组学分析工具:医学影像特征探索的完整解决方案
2026/7/4 5:24:16

FAE放射组学分析工具:医学影像特征探索的完整解决方案

FAE放射组学分析工具:医学影像特征探索的完整解决方案 【免费下载链接】FAE FeAture Explorer 项目地址: https://gitcode.com/gh_mirrors/fae/FAE 你是否曾经面对海量医学影像数据感到无从下手?想要从CT、MRI等影像中提取有价值的定量特征&#…

阅读更多
DesktopNaotu:你的终极离线思维导图解决方案,告别网络依赖!
2026/7/4 15:20:35

DesktopNaotu:你的终极离线思维导图解决方案,告别网络依赖!

DesktopNaotu:你的终极离线思维导图解决方案,告别网络依赖! 【免费下载链接】DesktopNaotu 桌面版脑图 (百度脑图离线版,思维导图) 跨平台支持 Windows/Linux/Mac OS. (A cross-platform multilingual Mind Map Tool) 项目地址:…

阅读更多