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倍。后来逐步应用这些技巧性能得到了显著提升。

相关新闻

Windows CMD dir 命令 10 个高级参数详解:从文件筛选到大小排序

Windows CMD dir 命令 10 个高级参数详解:从文件筛选到大小排序

Windows CMD dir 命令 10 个高级参数详解:从文件筛选到大小排序对于经常需要在 Windows 系统中处理文件和目录的系统管理员和开发者来说,dir 命令是一个不可或缺的工具。虽然大多数用户可能只熟悉基础的 dir 命令,但实际上它提供了大量高级参…

2026/7/5 11:55:41 阅读更多 →
Proxmox VE 8.3 家用主机安装:从旧硬盘格式化到管理页面访问的 3 个关键步骤

Proxmox VE 8.3 家用主机安装:从旧硬盘格式化到管理页面访问的 3 个关键步骤

Proxmox VE 8.3 家用主机改造指南:旧硬件焕发新生的完整实战手册去年收拾书房时,发现那台2017年组装的游戏主机已经积了厚厚一层灰。i5-7400处理器、16GB内存、256GB固态硬盘——这套配置放在今天跑最新游戏确实吃力,但作为家庭虚拟化平台却绰…

2026/7/5 11:53:39 阅读更多 →
手机AI Agent技术解析:从系统权限到本地化部署的实践指南

手机AI Agent技术解析:从系统权限到本地化部署的实践指南

🚀 30款热门AI模型一站整合,DeepSeek/GLM/Qwen 随心用,限时 5 折。 👉 点击领海量免费额度 手机AI Agent的讨论已经很多,但很多方向可能从一开始就错了。当你的手机屏幕在无人操控下自动跳转、点击,这种…

2026/7/5 11:53:39 阅读更多 →

最新新闻

PCB设计中地线与电源线加宽的技术要点与实战分析

PCB设计中地线与电源线加宽的技术要点与实战分析

1. PCB布线中地线与电源线加宽的核心逻辑 在PCB设计领域,地线(GND)和电源线(VCC)的走线宽度处理是影响电路性能的关键因素之一。不同于信号线可以相对灵活地调整宽度,这两类走线需要特殊对待的根本原因在于…

2026/7/5 12:58:00 阅读更多 →
基于YOLOv10的红外目标检测实战指南

基于YOLOv10的红外目标检测实战指南

1. 项目背景与核心价值去年夏天,我在参与一个山区救援项目时,亲眼目睹了传统无人机监控系统的局限性。在浓烟和夜间环境下,普通摄像头完全失效,而热成像设备虽然能捕捉到热源,却无法准确识别是人、动物还是车辆。正是这…

2026/7/5 12:51:58 阅读更多 →
AIAgent之工具调用:Function Call 与 Tool Use

AIAgent之工具调用:Function Call 与 Tool Use

工具调用:Function Call 与 Tool Use工具调用是 Agent 的「手」,让大模型能操作外部世界。这篇讲 Function Calling 的原理、工具怎么定义、模型怎么选工具、参数怎么传、常见的工具类型,以及开发中的最佳实践。大家好,我是黒漂技…

2026/7/5 12:49:55 阅读更多 →
ICM-42688-P与STM32F746ZG在工业自动化中的应用

ICM-42688-P与STM32F746ZG在工业自动化中的应用

1. ICM-42688-P与STM32F746ZG的黄金组合解析 在工业自动化和机器人控制领域,传感器与微控制器的协同设计直接决定了系统的性能上限。ICM-42688-P作为TDK InvenSense推出的6轴MEMS运动传感器,与STMicroelectronics的STM32F746ZG Cortex-M7微控制器形成的硬…

2026/7/5 12:47:54 阅读更多 →
混合整数二次规划在模型预测控制中的应用与求解器对比

混合整数二次规划在模型预测控制中的应用与求解器对比

1. 混合整数二次规划在模型预测控制中的核心作用 混合整数二次规划(MIQP)作为模型预测控制(MPC)中处理离散决策变量的关键技术,其核心价值在于平衡计算复杂度和控制性能。在车辆动力系统控制这类典型应用中,变速箱档位选择、发动机启停等离散决策变量与连…

2026/7/5 12:47:54 阅读更多 →
YOLO实战避坑指南:从环境配置到部署落地的完整工程化流程

YOLO实战避坑指南:从环境配置到部署落地的完整工程化流程

如果你在 2024 年或 2025 年才开始接触 YOLO,可能会觉得它已经是一个“古老”且“成熟”的技术栈,网上教程遍地都是,随便找个代码跑起来似乎并不难。但当你真正想把它用起来,无论是做一个毕业设计、一个内部工具,还是想…

2026/7/5 12:45:54 阅读更多 →

日新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

月新闻