深度学习入门笔记:张量与 PyTorch 基础
学习目标:
- 掌握深度学习入门基础知识
- 熟练深度学习的基本概念和运用机制
目录
- 一、import torch 详解
- 二、张量的概念
- 三、维数的简单理解
- 四、张量的功能实现
- 4.1 shape 和 numel()
- 4.2 reshape()
- 4.3 zeros()
- 4.4 通过列表创建二维数组
- 4.5 运算符
- 4.6 cat()
- 4.7 sum()
- 五、广播机制
一、import torch 详解
1.1 具体含义
- torch 是 PyTorch 库的顶层包名
- import torch 把 PyTorch 的核心功能加载到当前 Python 环境中
- 之后就可以用 torch.xxx 来调用它的各种 API
1.2 PyTorch 是什么
PyTorch 是目前最流行的深度学习框架之一,由 Meta(Facebook) 开源。
广泛用于:
- 🧠 神经网络搭建与训练
- 📊 张量(Tensor)计算(类似 NumPy,但支持 GPU 加速)
- 🔁 自动求导(autograd)
- 👁️ 计算机视觉、📝 自然语言处理 等 AI 任务
1.3 导入 torch 包
import torch
二、张量的概念
张量(Tensor)是 PyTorch 中的核心数据结构,用于存储和操作多维数组。张量可以视为一个多维数组,支持加速计算的操作。
在 PyTorch 中,张量的概念类似于 NumPy 中的数组,但是 PyTorch 的张量可以运行在不同的设备上,比如 CPU 和 GPU,这使得它们非常适合于进行大规模并行计算,特别是在深度学习领域。
三、维数的简单理解
- 一维是一行元素:[1, 2, 3, 4]
- 二维是行和列:(3, 4) 表示三行四列,即 (行数, 列数)
- 三维是 n 个二维的组成,相当于 n 个二维表格:(2, 3, 4) 表示有两个表格,每个表格三行四列,即 (个数, 行数, 列数)
二维示例:
[
[1, 2, 3, 4],
[4, 3, 2, 1]
]
三维示例:
[
[[1, 2, 3, 4],
[2, 3, 4, 5],
[3, 4, 5, 6]],
[[0, 1, 2, 3],
[0, 0, 0, 0],
[1, 1, 1, 1],
[2, 2, 2, 2]]
]
四、张量的功能实现
为了初学者可以更好地吸收知识,以下代码的初始张量/数组需要自己建立。
一个数值组成的数组,有多个维度:
x = torch.arange(12)
print(x)
输出:
tensor([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
4.1 shape 和 numel()
通过张量的 shape 属性访问形状,numel() 查看元素总个数。
print(x.shape)
print(x.numel()) # number element
输出:
torch.Size([12])
12
💡 shape 返回 torch.Size 类型,可以用 x.shape[0] 取第 0 维的大小。
4.2 reshape()
改变形状但不改变元素数量和值,可以调用 reshape()。
rs = x.reshape(3, 4)
print(rs)
输出:
tensor([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
💡 reshape(-1, n) 中的 -1 表示该维度自动推断。
4.3 zeros()
创建全 0、全 1 的任意维数组。
print("默认全0:", torch.zeros((2, 3, 4)))
输出:
默认全0: tensor([[[0., 0., 0., 0.],
[0., 0., 0., 0.],
[0., 0., 0., 0.]],
[[0., 0., 0., 0.],
[0., 0., 0., 0.],
[0., 0., 0., 0.]]])
💡 对应的还有 torch.ones((2, 3, 4)),创建全 1 张量。
4.4 通过列表创建二维数组
列表嵌套列表。
print(torch.tensor([[2, 1, 4, 3], [1, 2, 3, 4], [4, 3, 2, 1]]))
输出:
tensor([[2, 1, 4, 3],
[1, 2, 3, 4],
[4, 3, 2, 1]])
4.5 运算符
都是按对应元素运算。
n1 = torch.tensor([1.0, 2, 4, 8])
n2 = torch.tensor([2, 2, 2, 2])
print(n1 + n2)
print(n1 – n2)
print(n1 * n2)
print(n1 / n2)
print(n1 ** n2)
输出:
tensor([ 3., 4., 6., 10.])
tensor([–1., 0., 2., 6.])
tensor([ 2., 4., 8., 16.])
tensor([0.5000, 1.0000, 2.0000, 4.0000])
tensor([ 1., 4., 16., 64.])
4.6 cat()
张量的拼接:torch.cat() 是 PyTorch 里用来拼接张量的函数,全称是 concatenate。
它把多个张量沿着指定的维度"接"在一起,不改变张量的其他维度。
-
dim = 0:
- 一维数组:增加长度
- 二维数组:增加行数,列数不变,变成竖条条,垂直拼接
-
dim = 1:
- 一维没有 dim = 1
- 二维数组:水平拼接,增加列数
arr1 = torch.arange(12, dtype=torch.float32).reshape(3, 4)
arr2 = torch.tensor([
[2.0, 1, 4, 3],
[1, 2, 3, 4],
[4, 3, 2, 1]
])
print("第0维拼接:", torch.cat((arr1, arr2), dim=0))
print("第1维拼接:", torch.cat((arr1, arr2), dim=1))
输出:
第0维拼接: tensor([[ 0., 1., 2., 3.],
[ 4., 5., 6., 7.],
[ 8., 9., 10., 11.],
[ 2., 1., 4., 3.],
[ 1., 2., 3., 4.],
[ 4., 3., 2., 1.]])
第1维拼接: tensor([[ 0., 1., 2., 3., 2., 1., 4., 3.],
[ 4., 5., 6., 7., 1., 2., 3., 4.],
[ 8., 9., 10., 11., 4., 3., 2., 1.]])
4.7 sum()
张量求和,所有元素相加。
print(arr1.sum())
输出:
tensor(66.)
💡 也可以按维度求和:arr1.sum(dim=0) 按列求和,arr1.sum(dim=1) 按行求和。
五、广播机制
两个不同维数的张量,可以通过扩张或者复制变成一样维数的张量。
5.1 维数不同时
5.2 维数相同时
直接按位比较,相同或者至少有 1 个 1 就可以,反之不可以。
5.3 示例
arr3 = torch.arange(3).reshape(3, 1)
arr4 = torch.arange(2).reshape(1, 2)
print(arr3)
print(arr4)
print(arr3 + arr4)
输出:
tensor([[0],
[1],
[2]])
tensor([[0, 1]])
tensor([[0, 1],
[1, 2],
[2, 3]])
💡 结果形状为 (3, 2):arr3 沿列方向复制 2 次,arr4 沿行方向复制 3 次。
📌 总结:本文从 import torch 出发,介绍了张量的概念、维度理解、常用操作(shape、reshape、zeros、cat、sum 等)以及广播机制,适合深度学习入门者建立基础知识框架。
网硕互联帮助中心



评论前必须登录!
注册