Python Tensor 向量入门:从零理解深度学习的“数据语言“

发布时间:2026/6/3 1:01:06

Python Tensor 向量入门:从零理解深度学习的“数据语言“ 学深度学习第一道坎不是神经网络而是Tensor张量。这篇博客帮你用 10 分钟跨过这道坎。一、Tensor 到底是什么一句话Tensor 就是多维数组是深度学习中所有数据的载体。维度名称举例0维标量Scalar51维向量Vector[1, 2, 3]2维矩阵Matrix[[1,2],[3,4]]3维张量Tensor一张 RGB 图片高×宽×34维张量一批图片batch×高×宽×3你只需要记住在 PyTorch 和 TensorFlow 里所有东西都是 Tensor包括你的数据、权重、梯度。二、PyTorch 中的 Tensor推荐入门1. 创建 Tensorimporttorch# 从 Python 列表创建atorch.tensor([1,2,3])# 一维向量btorch.tensor([[1,2],[3,4]])# 二维矩阵# 常见快捷创建zerostorch.zeros(3,4)# 3×4 的全零矩阵onestorch.ones(2,3)# 2×3 的全一矩阵randtorch.rand(2,3)# 2×3 的随机数0~1均匀分布randntorch.randn(2,3)# 2×3 的随机数标准正态分布arangetorch.arange(0,10,2)# [0, 2, 4, 6, 8]2. 查看形状最常用的操作xtorch.randn(3,4,5)print(x.shape)# torch.Size([3, 4, 5])print(x.ndim)# 3维度数print(x.numel())# 60元素总数 3×4×5print(x.dtype)# torch.float32数据类型⚡90% 的 bug 都出在 shape 不对上养成随手.shape的习惯。3. 改变形状核心操作xtorch.arange(12)# [0,1,2,3,4,5,6,7,8,9,10,11]# reshape改变形状元素总数不变yx.reshape(3,4)# 变成 3×4 矩阵zx.view(3,4)# 和 reshape 类似但要求内存连续# 展平常用于连接全连接层flatx.view(-1)# -1 表示自动推断等价于 x.reshape(12)# 增加/删除维度非常常用atorch.tensor([1,2,3])# shape: [3]ba.unsqueeze(0)# shape: [1, 3] 加一维ca.unsqueeze(1)# shape: [3, 1]db.squeeze(0)# shape: [3] 删掉长度为1的维一张图理解unsqueeze和squeeze原始: [1, 2, 3] shape: (3,) ↓ unsqueeze(0) [[1, 2, 3]] shape: (1, 3) ↓ unsqueeze(1) [[[1], [2], [3]]] shape: (1, 3, 1) ↓ squeeze() [1, 2, 3] shape: (3,) ← 去掉所有长度为1的维度三、Tensor 的运算和 NumPy 几乎一样1. 基本运算atorch.tensor([1.0,2.0,3.0])btorch.tensor([4.0,5.0,6.0])# 逐元素运算不是矩阵乘法ab# [5, 7, 9]a*b# [4, 10, 18]a.pow(2)# [1, 4, 9]a.mean()# 2.0a.sum()# 6.02. 矩阵乘法最容易搞混Atorch.randn(2,3)Btorch.randn(3,4)# ✅ 矩阵乘法CA B# shape: (2, 4)Ctorch.matmul(A,B)# 等价写法# ❌ 逐元素乘法不是矩阵乘法DA*B# 只有 shape 完全相同时才能这样用⚠️*是逐元素乘才是矩阵乘。这个坑新手必踩。3. 广播机制Broadcastingatorch.tensor([[1,2,3]])# shape: (1, 3)btorch.tensor([[10],[20]])# shape: (2, 1)cab# 结果 shape: (2, 3)# [[11, 12, 13],# [21, 22, 23]]规则从右往左对齐维度相同或其中一个为 1 就能广播。四、Tensor 与 NumPy 互相转换importnumpyasnp# Tensor → NumPyttorch.tensor([1,2,3])nt.numpy()# 共享内存改一个另一个也变# NumPy → Tensornnp.array([1,2,3])ttorch.from_numpy(n)# 也是共享内存⚡ 共享内存意味着如果你改了 NumPy 数组Tensor 也会变反之亦然。需要独立副本用.clone()或.copy()。五、GPU Tensor一行代码提速devicetorch.device(cudaiftorch.cuda.is_available()elsecpu)xtorch.randn(3,4).to(device)# 送到 GPUytorch.randn(3,4).to(device)zx y# GPU 上运算z.cpu()# 拿回 CPU原则同一个运算中的所有 Tensor 必须在同一设备上否则报错。六、一个完整的小例子importtorch# 模拟一批数据8 张 32×32 的 RGB 图片batch_size8imagestorch.randn(batch_size,3,32,32)# (N, C, H, W)print(f数据形状:{images.shape})# torch.Size([8, 3, 32, 32])print(f每张图片元素数:{images.numel()/batch_size})# 3072 3×32×32# 假设经过一个卷积层后outputtorch.randn(batch_size,16,30,30)# 展平后喂给全连接层flattenedoutput.view(batch_size,-1)# (8, 14400)print(flattened.shape)# torch.Size([8, 14400])七、新手最常踩的 5 个坑坑现象解决*当成矩阵乘维度对不上报错用或matmulshape broadcast 意外结果维度不是预期的打印.shape确认忘记.float()类型不匹配报错Tensor 默认浮点是float32整数运算要转类型view()vsreshape()有时候一个报错一个不报view()要求内存连续不确定就用reshape()GPU/CPU 混用Expected all tensors to be on the same device统一用.to(device)八、PyTorch vs TensorFlow 怎么选PyTorchTensorFlow 2.x风格动态图Pythonic调试方便静态图优化好部署生态强入门难度⭐⭐ 更简单⭐⭐⭐ 稍复杂学术界主流逐渐被 PyTorch 取代工业部署TorchScript / ONNXTFLite / TF Serving 更成熟结论2024-2026 年入门首选 PyTorch没争议。总结记住这 5 句话就够了Tensor 多维数组是深度学习的唯一数据类型.shape是你最好的朋友遇到问题先打印它*是逐元素乘才是矩阵乘unsqueeze/squeeze/view(-1)三个操作覆盖 80% 的变形需求GPU 上跑只需要加一句.to(device)Tensor 不难难的是习惯用.shape思考。一旦养成这个习惯后面学线性层、卷积层、注意力机制都是同样的逻辑。

相关新闻