PyTorch深度学习基础(一):张量 Tensor 与基本数据操作详解

发布时间:2026/10/8 9:30:47

PyTorch深度学习基础(一):张量 Tensor 与基本数据操作详解 本系列目标从零开始学习深度学习基础掌握 PyTorch 编程核心工具为后续学习神经网络、CNN、Transformer、大模型等内容打下基础。在深度学习中我们每天都在处理大量的数据例如图片二维像素矩阵文本词向量序列蛋白质序列氨基酸编码矩阵图结构节点和边的特征矩阵这些数据最终都会被转换为一种统一的数据结构Tensor张量PyTorch 中最核心的数据结构就是 Tensor。本节我们将学习什么是 Tensor如何创建 TensorTensor 的形状和维度Tensor 基本运算广播机制索引与切片内存优化Tensor 与 NumPy 转换1. PyTorch简介PyTorch 是目前最流行的深度学习框架之一由 Meta AI 开发。它提供自动求导机制AutogradGPU 加速计算神经网络模块torch.nn优化算法torch.optim大量深度学习工具安装完成后我们首先导入 PyTorchimporttorch注意虽然框架名字叫PyTorch但是 Python 中导入模块使用torch而不是pytorch2. 什么是Tensor张量Tensor定义Tensor 可以理解为一个包含数字的数据容器是深度学习中存储数据的基本单位。例如标量 Scalar一个数字x5 x 5x5对应torch.tensor(5)向量 Vector一维数组x[1,2,3,4]x \begin{bmatrix}1,2,3,4 \end{bmatrix}x[1,2,3,4​]代码xtorch.tensor([1,2,3,4])矩阵 Matrix二维数组X[1234] X \begin{bmatrix} 12\\ 34 \end{bmatrix}X[13​24​]代码torch.tensor([[1,2],[3,4]])高维Tensor例如图片Height×Width×Channel Height×Width×ChannelHeight×Width×ChannelRGB图片224×224×3 224×224×3224×224×3Batch图片Batch×Channel×Height×Width Batch×Channel×Height×WidthBatch×Channel×Height×Width例如torch.zeros((32,3,224,224))表示32张图片3个颜色通道224×224像素3. 创建Tensor3.1 使用 arange 创建连续数据xtorch.arange(12)print(x)输出tensor([0,1,2,3,4,5,6,7,8,9,10,11])这里生成0,1,2,...,11 0,1,2,...,110,1,2,...,11共12个元素。4. Tensor形状 ShapeTensor 的形状可以通过x.shape查看输出torch.Size([12])表示这是一个长度为12的一维向量。5. Tensor元素数量使用x.numel()输出12numel:number of elements表示Tensor中元素总数量。6. Tensor改变形状 reshape深度学习中经常需要调整数据维度。例如原始[0,1,2,3,4,5,6,7,8,9,10,11]转换为3行4列矩阵Xx.reshape(3,4)print(X)结果tensor([ [0,1,2,3], [4,5,6,7], [8,9,10,11] ])注意reshape不会改变数据只是改变观察方式。7. 自动推断维度 -1例如x.reshape(-1,4)PyTorch 会自动计算第一维是多少。因为$ 12 \div 43 $所以(3,4)等价于x.reshape(3,4)8. 创建特殊Tensor8.1 全零矩阵torch.zeros((2,3,4))表示2个矩阵每个矩阵3行4列结果[ [ [0,0,0,0], [0,0,0,0], [0,0,0,0] ], [ ... ] ]8.2 全1矩阵torch.ones((2,3,4))所有元素xi1 x_i1xi​19. 随机初始化Tensor神经网络参数通常需要随机初始化。例如生成N(0,1) N(0,1)N(0,1)即均值0标准差1代码torch.randn(3,4)输出类似[ [-0.13,0.22,...], [1.32,-0.5,...] ]为什么需要随机初始化因为如果所有神经元参数相同梯度相同学习能力下降所以需要随机打破对称性。10. Tensor数学运算PyTorch支持加法 减法 -乘法 *除法 /幂运算 **例如xtorch.tensor([1.,2,4,8])ytorch.tensor([2.,2,2,2])print(xy)print(x-y)print(x*y)print(x/y)print(x**y)结果加法[3,4,6,10] [3,4,6,10][3,4,6,10]乘法[2,4,8,16] [2,4,8,16][2,4,8,16]11. 指数函数torch.exp(x)计算ex e^xex例如e12.718 e^12.718e12.718在深度学习中Softmaxsoftmax(xi)exi∑exj softmax(x_i) \frac{e^{x_i}} {\sum e^{x_j}}softmax(xi​)∑exj​exi​​就使用指数函数。12. Tensor拼接 concat多个Tensor合并torch.cat()例如两个矩阵Xtorch.arange(12).reshape(3,4)Ytorch.ones((3,4))按行拼接torch.cat((X,Y),dim0)结果形状64 6464按列拼接torch.cat((X,Y),dim1)结果38 383813. Tensor比较运算例如XY返回布尔矩阵True False常用于判断预测是否正确创建mask14. Tensor求和X.sum()例如012...1166 012...1166012...1166输出tensor(66.)15. Tensor广播机制 Broadcasting这是PyTorch非常重要的功能。例如atorch.arange(3).reshape(3,1)btorch.arange(2).reshape(1,2)a:[ [0], [1], [2] ]b:[ [0,1] ]两个形状不同(3,1) (1,2)但是abPyTorch自动扩展a:0 0 1 1 2 2b:0 1 0 1 0 1结果[ [0,1], [1,2], [2,3] ]这就是广播机制16. Tensor索引和切片类似Python列表。获取最后一行X[-1]获取第2~3行X[1:3]修改元素X[1,2]9表示第2行第3列修改整行X[0:2,:]12表示前两行全部设置为12。17. 节省Tensor内存普通操作YYX会创建新的Tensor修改Y引用因此内存增加。使用Y[:]XY可以原地修改。也可以XY减少内存开销。18. Tensor与NumPy转换PyTorchTensorNumPyndarray二者可以互相转换。Tensor → NumPyAX.numpy()NumPy → TensorBtorch.tensor(A)19. Tensor转换Python数字如果Tensor只有一个元素atorch.tensor([3.5])转换a.item()结果3.5也可以float(a)int(a)总结本节学习了PyTorch最核心的数据结构Tensor掌握功能方法创建Tensortorch.tensor生成连续数字torch.arange查看形状shape元素数量numel改变维度reshape全0zeros全1ones随机初始化randn拼接cat求和sum索引[]广播broadcastingNumPy转换numpy()深度学习核心思想神经网络本质上就是输入数据→Tensor→矩阵运算→Tensor→预测结果 输入数据 \rightarrow Tensor \rightarrow 矩阵运算 \rightarrow Tensor \rightarrow 预测结果输入数据→Tensor→矩阵运算→Tensor→预测结果因此掌握 Tensor是学习 PyTorch 和深度学习的第一步。
延伸阅读

更多相关文章

2026/10/6 10:47:11

IDEA Vim配置终极指南:从零打造高效开发环境

1. 项目概述:为什么你的IDEA需要一个专属的Vim配置? 如果你是一名Java开发者,或者深度使用JetBrains全家桶(如IntelliJ IDEA、PyCharm、WebStorm),同时又对Vim的高效编辑模式念念不忘,那么 .id…

2026/10/6 10:00:16

正斜杠与反斜杠:跨平台开发中的路径分隔符避坑指南

1. 从一次文件路径报错说起:为什么一个符号能让人抓狂?那天下午,我正在调试一个跨平台的数据处理脚本。在Windows上跑得飞快的程序,一放到Linux服务器上就立刻报错,错误信息直指一个文件路径:“No such fil…

2026/10/8 9:28:58

Text-to-CAD:从自然语言到可制造工程模型的技术落地路径

1. “Text-to-CAD”不是又一个AI画图玩具,而是工程设计链路的断点重构“text-to-cad”这个词最近在工程师群、CAD插件讨论区和高校机器人实验室里频繁冒头,但多数人第一反应是:“这不就是用文字生成CAD模型?跟MidJourney画图差不多…

2026/10/8 9:28:58

Ponytail CLI:轻量级API调试终端工具实战指南

1. 项目概述:从“ponytail”热词切入,还原一个被误读的实用工具本质 最近刷到不少人在问“ponytail插件怎么用”,点开评论区全是“找不到下载”“安装失败”“是不是病毒”,甚至有人把“ponytail”和某类浏览器扩展、桌面美化工具…

2026/10/8 9:28:58

Agent-Reach实战:打通多Agent协作的注册、路由与上下文传递

上个月我们在生产环境里做了一次非常难看的实验:两个AI Agent各自负责一段业务闭环,A负责接收用户需求,B负责执行数据回流,结果A在大模型能力上表现很好,却怎么也够不到B的接口。最后我从日志里翻出来,A在上…

2026/10/8 9:28:58

软件测试面试题攻略:四大底层能力与高频考点拆解

1. 先把话说在前面:面试题这东西,到底该怎么刷做了这么多年测试,也面试过不少人,我越来越觉得"软件测试面试题"这个关键词背后,藏着两种完全不同的需求。一种是刚入行或者准备跳槽的朋友,想找一份…

2026/10/8 9:28:58

计算机网络技术备考:用真题吃透TCP/IP与子网掩码核心考点

简介:《计算机网络技术》考试试题及答案PDF,面向高校计算机网络课程学习者、备考学生及自学者,以客观题和主观题相结合的形式覆盖核心考点。内容涉及数据通信与调制解调、交换方式(电路交换/报文分组交换/虚电路)、传输…

2026/10/8 9:23:55

Agent-Reach:为AI Agent构建统一工具触达层的架构实践

1. 项目背景与设计思路拆解 1.1 这个项目解决的是什么问题 先聊点实在的。做过AI Agent项目的朋友应该都有感受:模型本身的能力提升很快,但真正让Agent“干成事”的,往往是外围那几十个工具调用。今天接一个天气API,明天接一个数…

2026/10/5 6:32:56

Jev+Agent接管浏览器:browser-use实战与jev-ultrafast性能优化

1. 从“Jev”说起:为什么我要把Agent接进浏览器“Jev”这个词最近在圈子里出现的频率越来越高,很多人第一次听到会以为是某个新模型的名字,其实它更像是一种思路——把Jev模型的能力当作底座,通过Agent的方式去接管浏览器&#xf…

2026/10/7 8:18:33

多智能体集群实战:DeepAgents编排、MCP与A2A协议及Skills体系

1. 从"单兵作战"到"集群协同":多智能体编排到底在解决什么问题如果你最近在折腾 Agent 相关的东西,大概率会有一种感觉:单个 Agent 能做的事情,其实很快就摸到天花板了。你给它一个提示词,挂几个工…

2026/10/8 6:05:44

无源低通滤波器设计实战:从RC到LC,手把手教你避开那些坑

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 0:02:17

自然数立方等于连续奇数之和:从证明到编程验证

十几年来我一直游走在数学科普和编程教学这两块内容之间,对“看起来像魔法、拆开全是数学”的结论总是格外敏感。最近翻资料时又撞见一句话:任何一个自然数 m 的立方,都可以写成 m 个连续奇数之和。2 的立方等于 3 加 5,3 的立方等…

2026/10/8 0:02:17

C#上位机SSH连接实战:用SSH.NET补齐超时、批量与密钥认证

简介:这是一份基于 C# 开发的 SSH 连接功能半成品工程,原本作为另一个主项目的子功能模块,现独立打包分享。工程采用 WinForms 界面,包含源码、解决方案、安装部署工程、NuGet 依赖包及说明文档,适合正在做远程连接、网…

2026/10/8 0:02:17

Java SpringBoot一体化智能售后系统设计与实现全解析

毕业设计年年做,Java Web 方向的题目翻来覆去就那么几个,但“一体化智能售后系统”这个题,每次看到我都觉得值得认真聊一聊。它不是一个简单 curd 堆出来的管理系统,而是把客户、工单、派单、处理、回访、统计整条链路串起来的一套…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑